Обновление содержимого NSOutlineView

У меня есть NSOutlineView, который показывает контент, контролируемый NSTreeController, который я связываю с NSMutableArray (arrayOfFiles). Массив содержит объекты NSTreeNode, где presentObject (класс Fileobject) содержит несколько иваров. Я хотел бы редактировать и обновлять ивар с именем "направление" для конкретных объектов. Мне удается получить интересующий меня объект, используя NSIndexPath, который я сохранил для каждого объекта.

[self.myOutlineViewController.myTreeController setSelectionIndexPath:myIndexPath];

Fileobject *myObject =[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject];

[myObject setDirection:0];

Это работает нормально, но у меня возникают проблемы, когда я хочу обновить объект, который я только что извлек в NSIndexPath. Следующие сбои:[self.myOutlineViewController.myTreeController removeObjectAtArrangedObjectIndexPath:myIndexPath]; с сообщением об ошибке

An uncaught exception was raised
2012-11-08 17:23:25.557 S3access[20379:12b03] *** -[NSKeyValueSlowMutableArray     removeObjectsAtIndexes:]: value for key myArrayOfFiles of object 0x40012e460 is nil

Я понимаю, что я делаю что-то не так с кодированием значения ключа здесь, но я не могу понять, что это такое. Я пытался найти решения во всех примерах от Apple, но я могу найти только примеры, в которых не используются NSTreeController и NSTreeNode. Я думал: 1) извлечь объект в indexpath 2) отредактировать извлеченный объект 3) удалить текущий объект в indexpath 4) вставить мой новый отредактированный объект в indexpath с помощью команды [self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath];, Я не понимаю, как я могу заменить свой объект, используя кодирование значения ключа, когда я не заменяю только ivar, но весь объект?

Любые предложения о том, что я делаю неправильно, и предложения о том, как я могу решить эту проблему, очень ценятся.

Ура и спасибо! Тронд

1 ответ

Решение

Мне наконец удалось заставить мое обновление NSOutlineView работать должным образом, и так как мой вопрос был чрезвычайным, я думал, что по крайней мере обновлю с ответом. Оказывается, моей проблемой было скорее отсутствие правильного понимания KVC, а не проблемы программирования. Прочитав ответы на вопросы о Stackru и документации Apple, я, наконец, выяснил, как включить динамическое обновление моего NSOutlineView и его содержимого NSTreeController (ограммы Objects), которые представлены с использованием NSTreeNode. Следующий код работал для меня, предполагая, что вы знаете NSIndexPath (myIndexPath) вашего объекта:

[self.myOutlineViewController.myOutlineView willChangeValueForKey:@"direction"];
[[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject] setDirection:0];
[self.myOutlineViewController.myOutlineView didChangeValueForKey:@"direction"];

Надеюсь, это может помочь некоторым другим. Ура, Тронд

Другие вопросы по тегам