У меня есть NSDocument, который имеет следующую структуру:
@interface MyDocument : NSDocument
{
NSMutableArray *myArray;
IBOutlet NSArrayController *myArrayController;
IBOutlet MyView *myView;
}
@end
Я создаю экземпляр NSArrayController и MyView в MyDocument.xib и установил соединения с владельцем файла (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
, они не появляются для обновления myArray
MyDocument. Я пробовал оба следующих подхода:
[myViewArray addObject:value];
[self addMyViewArraysObject:value];
(Второй подход вызывает ошибку компилятора, как и ожидалось, но я думал, что среда выполнения Objective C "реализует" этот метод в соответствии с моим ограниченным пониманием KVO.)
Что-то не так с тем, как я пытаюсь обновить myViewArray
? Что-то не так с моей программной привязкой? (Я пытаюсь сделать это программно, потому что MyView - это пользовательский вид, и я не хочу создавать для него палитру IB.)