遇到一些问题显示一个NSArrayController的在两个窗口中不同XIBs中定义的内容。

在我的主窗口(MainMenu.xib),我这势必一个NSArrayController

一个NSTableView

在我的第二XIB,我有一个包含一个NSTableView另一个窗口。我创建了一个新的NSArrayController的,并结合该表到该NSArrayController的的内容。

两个NSArrayControllers被绑定到完全相同的NSArray。

一切都很好在第一,但问题是,如果一个对象被添加到在主窗口中使用NSArrayController的阵列,数据的次级窗口的视图不被更新。这是最有可能的,因为它不知道它需要进行自我更新,因为它的NSArrayController的未使用添加新的对象。

我想这样做的是使用NSArrayController的完全相同的情况下在两个窗口。如果这样的对象被添加到阵列中,两个视图将被更改的通知。

的问题是,我无法弄清楚如何在Interface Builder做到这一点。我不能绑定一个NSArrayController到另一个NSArrayController的(我得到这表明它只能绑定到一个NSArray运行时错误)。连接到NSArrayController的文件拥有者的NSArrayController的成员也不会有帮助,因为这只会消灭NSArrayController的,我想使用它。

我想我可以在代码中设置绑定了自己,但现在看来似乎会更好,如果可能的话使用Interface Builder。有没有办法在Interface Builder做到这一点,也许更好的方法来设置它一起?

更新:在回应查克的回答和评论,我试过如下: 结合的我的NSTableView的的表的内容向NSArrayController的构件的arrangedObjects(如果我使用的NSArrayController的本身,在日志中出现一个错误:“[NSArrayController的COUNT]:无法识别的选择发送到实例”) 结合的表中的每一列到文件的所有者,用arrayController.arrangedObjects.propertyName的模型键路径

这仍然没有导致表中获取更新的内容。我想这是因为我结合NSArrayController中的arrangedObjects,而不是NSArrayController的本身。但是,如果我绑定到直接NSArrayController的,这给了我的错误。

通常情况下,我会从“绑定到”组合框,使用arrangedObjects作为控制器的关键,而财产本身作为示范重点路径选择我的NSArrayController的。我不知道该怎么做的,等效在这种情况下 - 如果我能在所有

难道我做错了什么在上面的过程?

有帮助吗?

解决方案

这是我已经能够拿出最好的选择是通知第二NSArrayController,它的管理的阵列已经在其上调用rearrangeObjects:改变。这似乎是笨重,但它的作品。

其他提示

怎么样设置起来作为IB代理对象然后实例代码的实际,也许在你的应用程序代理?

可以得到既NSArrayControllers当阵列被添加到通过KVO更新。关键是,你必须观察并加入到在KVO兼容的方式在阵列。

您会希望某些对象拥有数组,我们称之为“模式”。该阵列具有为对象上的一个键,让我们把关键“contentArray”。接下来,当你增加/删除从,你应该先调用的“模式” mutableArrayForKey得到“contentArray”做到这一点。然后加法/从阵列切除应该工作,例如:

控制器1被绑定到self.model.contentArray

控制器2被绑定到self.model.contentArray

//this method is on the "model" object
-(void)addContent(id content)
{
    NSMutableArray* contentArr = [self mutableArrayForKey:@"contentArray"];
    [contentArr addObject:content]; //this will trigger KVO notifications
}

或者,也可以手动执行KVO通知这样的:

-(void)addContent(id content)
{
    [self willChangeValueForKey:@"contentArray"];
    [m_contentArray addObject:content];
    [self didChangeValueForKey:@"contentArray"];
}

有具有两个阵列控制器应该使一个视图时,通过另一个更新不更新任何理由。如果它没有发生,这听起来像你的志愿通知找到感觉丧失。最有可能你直接编辑阵列(在一个NSArrayController子类的add:方法,也许?),但没有发送正确更改通知。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top