2013-09-13 4 views
1

Почему я получаю эту ошибку при попытке вставить ребенка в мой NSTreeController?Не удается выполнить операцию, потому что childrenKeyPath is nil

NSTreeController *tree = [NSTreeController new]; 
NSTreeNode *node1 = [NSTreeNode treeNodeWithRepresentedObject:@{ @"type": @"shirt" }]; 

// The below method causes mysterious crash 
[tree insertObject:node1 atArrangedObjectIndexPath:[NSIndexPath indexPathWithIndex:0]]; 

Xcode говорит:

* Нагрузочный приложение из-за неперехваченного исключением 'NSInternalInconsistencyException', причина: '[Класс объекта: NSMutableDictionary] Невозможно выполнить операцию, так как childrenKeyPath равна нулю' *

Зачем возникает эта ошибка? Что такое childrenKeyPath и зачем мне это нужно (я не использую конструктор интерфейса)?

ответ

2

Я сделал несколько ошибок здесь. Не следует вставлять экземпляры типа NSTreeNode в NSTreeController с insertObject. Вы используете insertObject для вставки объекта модели, после чего NSTreeNode будет автоматически создан для него.

Кроме того, в вашем объекте модели вам необходимо иметь свойство или ключ, который установлен как NSMutableArray. Затем, прежде чем вставлять какие-либо объекты модели, вы устанавливаете свойство childrenKeyPathNSTreeController, чтобы оно было равно имени этого свойства или ключа.

Это потому, что NSTreeController и NSTreeNode не предназначены для хранения данных или дочерних объектов самих, но действует как простые, но полезные «карты» для моделей вы созданы и сохранены.

Я надеюсь, что эта информация поможет другим, потому что остальная часть StackOverflow была странно молчала об этом ...

 Смежные вопросы

  • Нет связанных вопросов^_^