2013-12-08 1 views
0

я заметил, что мой подкласс ОС NSTreeController работает newObject только тогда, когда метод add: называется, но никогда для addChild:NSTreeController AddChild: не вызывает newObject но добавить: делает (режим Class/Object)

Я не нашел this thread обсуждения очень такой же выпуск. Хотя в этом случае пользователь использует древовидный контроллер в режиме Core Data, однако у меня есть мой набор для использования определенного класса (режим объекта).

Какая причина может быть для addChild:, не используя метод newObject?

Если newObject вызывается для add: я не вижу причин, почему она не должна работать на addChild:. Я подтвердил это поведение в демонстрационном приложении SourceView от Apple, заменив OutlineController на подкласс и соединительные кнопки на add: и addChild: - снова только add: звонки newObject. Я нахожу это действительно действительно странным поведением.

ответ

1

Найденный answer in the docs:

ДОБАВЛЯТЬ: и вставки: действия используют метод newObject создать объект, который добавляется в коллекцию. В режиме объекта addChild :, и insertChild: создайте объекты класса, заданного objectClass, , но не используйте метод newObject для этого.

По крайней мере, он говорит, что так оно и есть. Хотя это противоречит описанию класса. И они пренебрегли объяснением, почему так оно и есть.

+0

Я предполагаю, что он имеет какое-то отношение к тому, чтобы избежать initWithEntity, когда вставленные дети могут быть нескольких подклассов, но я изо всех сил стараюсь примирить это предположение со страшной документацией. – stevesliva

0

Какая причина может быть для addChild: не использовать метод newObject?

Это зависит от контекста. Если NSTreeController разговаривает с обычными старинными объектами, то будет запустит -newObject в контексте -addChild, поскольку, учитывая известный -objectClass, контроллер дерева имеет всю необходимую ему информацию, чтобы поместить все в нужное место.

Если NSTreeController разговаривает с NSManagedObjectContext, он не будет запустить -newObject, потому что -newObject реализация не будет иметь достаточный контекст, чтобы установить связь с выбором, и отношения должны быть на месте, когда -addChild: закончена.

+0

независимо от того, какой контекст (coredata/managed или objectClass) addChild: никогда не отправляет сообщение newObject (см. Мой ответ, руководство по программированию говорит, что addChild: не будет выдавать newObject, в то время как ссылка на класс указывает противоположное) – LearnCocos2D