您如何存储国家/城市数据(它们也在核心数据中)?这将决定这里的一些细节,但基本思想是使用cocoa绑定将每个nspoupbutton链接到nsarraycontroller的内容。
Cocoa Bindings
不是非常简单,但一旦你正确配置了所有的东西,它们确实像魔术一样工作。问题是,当您没有正确配置事物时,很难确定出哪里出了问题。
以下是常规设置:
您将第一个NSarrayController配置为国家/地区数据的内容。如果使用核心数据,则将托管对象上下文传递给它,并让它为您的
Country
实体。否则,必须将其内容绑定到实现
Key-Value Coding compliant
访问其关联城市的方法。在这里使用核心数据作为数据源将使您的生活更轻松。
然后将第二个nsarraycontroller绑定到从
selection
首先,用适当的关键路径去你的城市。对于核心数据,这将是
Content Set
(因为这是无序的)。
编辑:
啊,评论栏完全没用。以下是对您第一条评论的正确回应:
要在核心数据中建模此关系,您需要将模型设置为如下所示:
需要注意的是,我已经为我的实体提供了自定义类(
MBCountry
和
MBCity
)通过要求xcode为您生成类(选择实体,转到新文件…,然后选择cocoa类->托管对象类),您可以使用真正的访问器方法(而不是
valueForKey:
)(顺便说一下,我真的很重视
Rentzsch's Mogenerator
每次保存时都会自动执行此操作。)
现在您的模型已经设置好了,您可以这样填充数据存储:
NSArray *countryList = ...; /* Get your array of country names */
for (NSString *countryName in countryList) {
MBCountry *aCountry = (MBCountry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCountry" inManagedObjectContext:context];
[aCountry setName:countryName];
NSArray *cityList = ... /* Get your array of city names for this country */
for (NSString *cityName in cityList) {
MBCity *aCity = (MBCity *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCity" inManagedObjectContext:context];
[aCity setName:cityName];
[aCountry addCitiesObject:aCity];
}
}
核心数据实际上是
方式
这里杀得太多了。然而,听起来你想在课程的其他部分使用核心数据,所以这是一个很好的学习机会。它有一个非常陡峭的学习曲线(当然是CocoaAPI最棘手的方面之一),但它是可行的。继续插电!