Фон
Я создал список источников (аналогично iTunes и др.) В моем приложении Cocoa.
У меня есть NSOutlineView со значением
столбец привязан к
ключевой путь NSTreeController.
Доступ к NSTreeController
Объекты JGSourceListNode в ядре
Хранилище данных.
У меня есть три подкласса
JGSourceListNode - JGProjectNode,
JGGroupNode и JGFolderNode.
Я выбралIndexPaths в NSTreeController, привязанный к NSArray с именем selectedIndexPaths в моем делегате приложения.
При запуске я ищу групповые узлы и, если они не найдены в основном хранилище данных, я создаю их:
if ([allGroupNodes count] == 0) {
JGGroupNode *rootTrainingNode = [JGGroupNode insertInManagedObjectContext:context];
[rootTrainingNode setNodeName:@"TRAIN"];
JGProjectNode *childUntrainedNode = [JGProjectNode insertInManagedObjectContext:context];
[childUntrainedNode setParent:rootTrainingNode];
[childUntrainedNode setNodeName:@"Untrained"];
JGGroupNode *rootBrowsingNode = [JGGroupNode insertInManagedObjectContext:context];
[rootBrowsingNode setNodeName:@"BROWSE"];
JGFolderNode *childFolder = [JGFolderNode insertInManagedObjectContext:context];
[childFolder setNodeName:@"Folder"];
[childFolder setParent:rootBrowsingNode];
[context save:nil];
}
Что я хочу
Когда я запускаю приложение, я хочу, чтобы обе группы верхнего уровня были расширены и «Необученные» были выделены, как показано:
Мое окно http://synapticmishap.co.uk/Window.jpeg
Проблема
Я поместил следующий код в метод applicationDidFinishLaunching:
делегата приложения:
[sourceListOutlineView expandItem:[sourceListOutlineView itemAtRow:0]];
[sourceListOutlineView expandItem:[sourceListOutlineView itemAtRow:2]];
NSIndexPath *rootIndexPath = [NSIndexPath indexPathWithIndex:0];
NSIndexPath *childIndexPath = [rootIndexPath indexPathByAddingIndex:0];
[self setSelectedIndexPaths:[NSArray arrayWithObject:childIndexPath]];
но вид структуры, похоже, еще не подготовлен, поэтому этот код ничего не делает.
В идеале, в конечном итоге я хочу сохранить последний выбранный пользователем вариант и восстановить его при перезапуске.
Вопрос
Я уверен, что с помощью сумасшедшего KVO можно наблюдать, когда заполняется NSTreeController или NSOutlineView, затем расширять элементы и изменять выбор, но это выглядит неуклюже и слишком похоже на обходной путь.
Как бы я сделал это элегантно?