Отправка сообщений объектам, созданным в Интерфейсном Разработчике

Я новичок в Cocoa, Objective-C и ООП в целом. Я учусь каждый день. Согласно «Программированию какао для Mac OS X для DUMmIES» вы можете создать объект в Xcode следующим образом:

myObject = [[Class_name alloc] init];

После этого вы сможете отправлять ему сообщения в соответствии с методами, указанными в Class_name. Все идет нормально. Но вчера я последовал этому руководству: Введение в привязки и заметил кое-что странное. Согласно руководству, вы должны создать объект NSArrayController в Интерфейсном Разработчике. Но если вы хотите добавить строку в массив, управляемый контроллером, со значениями, скажем, из пары NSTextFields, вам нужно вызвать его метод AddObject, но как? Я не знаю названия или идентификатора объекта, верно?


person Joran    schedule 14.06.2011    source источник


Ответы (1)


Просто создайте розетку

IBOutlet NSArrayController *arrayController;

и подключите к нему свой arrayController в ИБ; Для вызова его метода используйте [arrayController methodName];

person VenoMKO    schedule 14.06.2011
comment
Да, я знаю, но я хочу сделать это из кода. Потому что таким образом (вызывая метод Add:) я получаю пустую строку в моем массиве. И я хочу заполнить его содержимым пары TextFields, или мне что-то не хватает? - person Joran; 14.06.2011
comment
Если я прав, ваше представление коллекции (или что-то в этом роде), привязанное к контроллеру массива, не обновляет свое содержимое. Если это так, прочитайте ссылку в руководстве KVO. - person VenoMKO; 14.06.2011
comment
Эх, нет, это не совсем то, что происходит. Мне нужно добавить строку в массив. По-видимому, способ сделать это - вызвать метод addObject контроллера массива. Контроллер массива автоматически обновляет tableView. Но как мне вызвать этот метод из кода? Я могу сделать это в Интерфейсном Разработчике, но тогда добавляется только пустая строка. И я хочу использовать лист, на котором вы можете ввести что-нибудь и использовать эти значения для новой строки. - person Joran; 14.06.2011
comment
Где-нибудь в вашем классе контроллера добавьте этот метод: - (IBAction)addDataRow { [arrayController addObject:[NSDictionary dictionaryWithObjectsAndKeys:[textField1 stringValue],@"name",[textField2 stringValue],@"description", nil]]; [tableView reloadData]; } Подключите это действие к любой кнопке в IB. И проверьте Model Key Path значения в столбце. Они должны совпадать с ключами в словаре. - person VenoMKO; 15.06.2011