次の構造を持つ 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 に追加しようとすると、 MyDocumentmyViewArray
のmyArray
. 次の両方のアプローチを試しました。
[myViewArray addObject:value];
[self addMyViewArraysObject:value];
(2 番目のアプローチでは、予想どおりコンパイラ エラーが発生しますが、KVO に関する私の限られた理解により、Objective-C ランタイムはこのメソッドを「実装」すると考えていました。)
更新しようとしている方法に何か問題がありますmyViewArray
か? プログラムによるバインドに何か問題がありますか? (MyView はカスタム ビューであり、IB パレットを作成したくないため、プログラムでこれを実行しようとしています。)