2

Я создаю собственное собственное настраиваемое дерево. Для этого я хотел бы наблюдать NSTreeController за обновлениями ко всем отношениям своих элементов. NSTreeController привязан к контексту управляемого объекта CD. Каждый уровень глубины имеет свой собственный CD Entity с родительскими/дочерними/isLeaf свойствами. Мне нужно поддерживать такую ​​же иерархичность в представлении (и порядке предметов детей). Если что-то вставлено, я начну наблюдать за свойством child. И мне нужно знать индексный путь для вновь вставленного объекта.Наблюдение за объектами CoreData, связанными с NSTreeController для вставки/удаления

Я хотел бы точно знать, что было вставлено/удалено, поэтому я могу начать наблюдать за его вставками/удалениями своим детям. Как я понимаю, стандартный способ сделать это - «изменить» NSDictionary внутри watchValue: forKey ..., но изменения NULL.

Я знаю, что это долгое время, но есть ли какое-то ХОРОШЕЕ решение? Я видел, что некоторые примеры «сохраняют массивы», а затем, когда модель изменяется, вы сравниваете различия. Его сложнее для дерева. Также этот способ уничтожает память и циклы процессора. У меня есть одно обходное решение, которое я тестирую. Это просто работы, поэтому я пока не буду описывать это.

+0

Вы когда-нибудь придумывали достойное решение для этого? У меня такая же проблема. –

ответ

1

Как насчет подкласса NSTreeController и реализации его методов вставки/удаления. Что-то вроде этого, например.

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath { 

     // ... code to update your object relationships .. 
     // ... Take care here if you update any variables in your model (eg a sortindex) that would trigger KVO in the NSTreeController. In those case you need to make the updates without triggering KVO by using setPrimitiveValue:forKey or get an infinite loop 

     [super insertObject:object atArrangedObjectIndexPath:indexPath]; 

}