Как редактировать данные NSArrayController (или использовать что-то еще)

#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…