#objective-c #cocoa #edit #nsarraycontroller #key-value-coding
#objective-c #cocoa #Редактировать #nsarraycontroller #кодирование ключа-значения
Вопрос:
я создал nsarraycontroller для отображения его данных в моем nstableview. это работает. но как мне изменить эти данные сейчас?
[arrayController addObject:[...]]
добавляет объект, как мне вернуть его обратно?
я пытался:
NSMutableArray *data = [arrayController mutableArrayValueForKey:@"column1"];]
но затем я получаю эту ошибку
2011-05-29 19:25:50.125 TestApp[1665:903] [<NSArrayController 0x113808500> valueForUndefinedKey:]: this class is not key value coding-compliant for the key column1.
(объекты в моем arraycontroller, представляющие строки в моем представлении, принадлежат классу (с именем FileEntry), состоящему из 4 свойств, и я добавил их в качестве ключей к моему nsarraycontroller)
я думал, что kvc-compilant означает, что у каждого атрибута есть средство получения и установки? (и разве это не то, что делают свойства?).
я протестировал свой класс, могу ли я использовать эту функцию:
FileEntry *entry = [[FileEntry alloc] initWithUrl:@"test"]; //(this adds the string "test" to the property "fileurl")
NSLog(@"%@n", [entry valueForKey:@"fileurl"]);
and it returns:
> 2011-05-29 19:31:54.760 TestApp[1718:903] test
и это работает. итак, как мой класс может не быть kvc-компилятором?
в любом случае, я также пытался использовать источник данных tableviews вместо этого, но не могу заставить эти две функции работать. будет ли это более полезным, чем nsarraycontroller? возможно ли вообще изменить данные nsarraycontroller?
Ответ №1:
Обычно вам нужен массив contend для обработки NSArrayController, поэтому вы могли бы просто взять этот массив и использовать методы NSMutableArray. Например, у вас есть в вашем MyController.h объявление массива с его методами setter и getter, и вам нужно только привязать к нему массив contend контроллера массива. Затем вы можете воспользоваться двумя кнопками для методов add и remove контроллера массива, чтобы что-то добавить. Теперь вы должны привязать значение столбца, например, к FileEntry.файловый файл вашего контроллера массива управляемых объектов, теперь вы должны иметь возможность добавлять данные в табличное представление. И вы также можете редактировать имена в табличном представлении. Если вы хотите где-то извлечь что-то из массива в вашей программе, вы можете использовать выход вашего табличного представления, подобный этому:
NSInteger row = [myTableViewOutlet selectedRow];
FileEntry* myEntry = [myArray objectAtIndex:row];
Комментарии:
1. круто, спасибо, теперь это работает! я привязал свой arraycontroller к массиву в моем appdelegate (я делал это раньше, но я думаю, что моя ошибка заключалась в неправильной инициализации) и теперь могу добавлять строки в свой tableview, добавляя их в arraycontroller. я нахожу это немного странным — добавлять в arraycontroller, редактировать в array…