【发布时间】:2009-04-17 12:49:22
【问题描述】:
我有一个具有以下结构的 NSDocument:
@interface MyDocument : NSDocument
{
NSMutableArray *myArray;
IBOutlet NSArrayController *myArrayController;
IBOutlet MyView *myView;
}
@end
我在 MyDocument.xib 中实例化了 NSArrayController 和 MyView,并与文件的所有者 (MyDocument) 建立了连接,所以我很确定从 Interface Builder 的角度来看,我所做的一切都是正确的。
MyView 的界面很简单:
@interface MyView : NSView {
NSMutableArray *myViewArray;
}
@end
现在,在MyDocument windowControllerDidLoadNib,我有以下代码:
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];
[myArrayController setContent:myArray];
// (This is another way to do it) [myArrayController bind:@"contentArray" toObject:self withKeyPath:@"myArray" options:nil];
[myView bind:@"myViewArray" toObject:myArrayController withKeyPath:@"arrangedObjects" options:nil];
}
在调试器中,我已验证 myViewArray 是一个 NSControllerArrayProxy,因此看来我的编程绑定是正确的。但是,当我尝试将 MyView 方法中的对象添加到 MyView myViewArray 时,它们似乎不会更新 MyDocument 的 myArray。我尝试了以下两种方法:
[myViewArray addObject:value];
[self addMyViewArraysObject:value];
(正如预期的那样,第二种方法会导致编译器错误,但我认为根据我对 KVO 的有限理解,Objective-C 运行时会“实现”此方法。)
我尝试更新myViewArray 的方式有问题吗?我的编程绑定有问题吗? (我正在尝试以编程方式执行此操作,因为 MyView 是自定义视图,我不想为其创建 IB 调色板。)
【问题讨论】:
标签: objective-c cocoa cocoa-bindings key-value-observing key-value-coding