Так что вполне вероятно, что вы уже давно это решили, но если кто-то еще наткнется на этот вопрос ...
Я заполняю массив через NSMutableArray
, но я не уверен, как я могу заполнить массив через NSArrayController
, поскольку у меня нет экземпляра в моем классе Controller.m. Подскажите, пожалуйста, как я могу решить эту проблему.
Возможно, вы делали что-то вроде
[myData addObject:someObject];
Однако ваш NSArrayController
не узнает об этом изменении экземпляра NSMutableArray
, потому что addObject
не соответствует требованиям KVC. Вам необходимо сообщить любому наблюдающему объекту, что ваш экземпляр NSMutableArray
изменился. Есть как минимум два способа сделать это. Предполагая, что ваше свойство экземпляра NSMutableArray
называется "myData", вы можете сделать что-то вроде следующего:
[self.willChangeValueForKey:@"myData"];
[myData addObject:someObject];
[self.didChangeValueForKey:@"myData"];
or
NSMutableArray *bindingsCompliantArray = [self mutableArrayValueForKey:@"myData"];
[bindingsCompliantArray addObject:someObject];
Другой ответ SO (ссылка) содержит хорошее объяснение того, что на самом деле делает mutableArrayValueForKey, но я рекомендую прочитать документацию разработчика Apple по кодированию ключ-значение и наблюдению за ключом, чтобы понять это.
Я перетащил экземпляр NSController в лоток mainmenu.nib. Нужно ли мне объявить IBOutLet NSArrayController в моем файле Controller.h, а затем подключить его к экземпляру NSArrayController в лотке?
Вам нужен NSArrayController
экземпляр в вашем файле пера, но вам не нужен IBOutlet в вашем интерфейсе для ситуации, которую вы здесь описали. NSArrayController
должен быть привязан к ключу вашего NSMutableArray
(myData в моем примере), и похоже, что столбцы вашей таблицы уже привязаны правильно.
person
Stephen Booher
schedule
21.04.2011