0

我有一个树控制器绑定到一个数组,称为“内容”。 “内容”是一个称为“汽车”的模型对象数组。每个“Car”包含名为“carName”的NSString和名为“mostPopularColors”的NSMutableArray。 “mostPopularColors”包含NSMutableDictionary对象,其中包含“最受欢迎”,“第二受欢迎”,“第三受欢迎”等关键字,以及诸如“红色”,“绿色”,“蓝色”等值的关键字可可 - 在表格视图中显示嵌套数组

大纲视图绑定到树控制器排列的对象,并在“内容”中显示每个“汽车”的“carName”。单独的表格视图列出了一列中的每个“carName”。这是通过将数组控制器绑定到树控制器(控制器键:选择,模型键路径:allChildLeafs)来完成的。然后将表列值绑定到数组控制器排列的对象,模型键路径:carName。

在表格视图中,我需要另外两列分别列出最流行的颜色和第二最流行的颜色。所以决赛桌应该有三个栏目,列出所有车名以及每辆车的两种最流行的颜色。

我可以按照描述访问汽车名称,但不能访问颜色,因为它们本身就是数组。

我曾试图弥补第二阵列控制器,并将其链接到第一,但不能让它开始工作。

所以在最后我希望能够选择在大纲视图汽车或汽车,并在表中看到鉴于他们各自的所有名称和顶两种颜色。

回答

0

看起来第二个数组控制器无法工作,因为无法将两个阵列控制器连接到一个表视图。

这是绑定到树控制器(控制器密钥:选择,模型关键路径:allChildLeafs)阵列控制器被留在原处,但不限制于任何视图。

在Xcode中一个IBOutlet NSArrayController的被创建,然后连接到在界面生成器(IB)新创建的阵列控制器。此外,还有一个新的NSMutableArray被声明,包含setter和getter方法。接着,下面的代码被用于阵列控制器绑定到新的NSMutableArray:

[newArrayController bind:NSContentArrayBinding toObject:self withKeyPath:@"mutableArray" options:nil]; 

所以,现在的阵列控制器将“持有”无论是新的可变数组英寸通过将新的数组控制器连接到一个表视图,数组的内容可以显示在表视图中。

所有这一切都需要的是使这种可变数组包含每节车厢一个NSMutableDictionary对象。每个字典将有三个关键值对。三个键将是:“carName”,“mostPopularColor”,“secondMostPopularColor”。

由于旧的数组控制器持有当前在大纲视图中选择的“Car”对象的数组,因此首先获取“Car”对象的数组。要做到这一点,观察到在旧阵列控制器的arrangedObjects的变化,并使用观察“车”对象的新数组:

[oldArrayController addObserver:self forKeyPath:@"arrangedObjects" options:NSKeyValueObservingOptionNew context:nil]; 

要处理的观察和使用“驾驶”的新数组对象得到字典的阵列天线的最终对象被实施了以下方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {if (object == selectedChildLeafsController) 
{ 
    if ([[object arrangedObjects] count] > 0) 
    {//make a new mutable array, here called "array", of dictionaries from your array of "Car" objects which is found in [object arrangedObjects] . And then something like... 
    [self setMutableArray: array]; 
    [newArrayController bind:NSContentArrayBinding toObject:self withKeyPath:@"selectedBonds" options:nil];}else 
{ 
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
}}