Восстановление выделения в NSTableView (NSWindowRestoration)

Я работаю над восстановлением окна в приложении Cocoa без документов. Приложение имеет интерфейс, похожий на Mail.app. Каждое окно представляет учетную запись; на боковой панели в этом окне перечислены разговоры в этой учетной записи, а в основной области перечислены сообщения в выбранном разговоре.

Каждый из этих списков основан на представлении NSTableView, Список бесед связан с NSArrayController чья contentSet привязан к оконному контроллеру account имущество; список сообщений привязан ко второму NSArrayController, чья contentSet связан с первым NSArrayControllerВыбор.

Я довел свою работу по восстановлению окон до такой степени, что он заново открывает все окна и заново связывает их с объектами учетных записей, но я не знаю, как восстановить выборки табличных представлений. Это не происходит автоматически - когда окно восстанавливается, объект выбирается, но это не тот, который был выбран ранее. Что тут происходит? Какой будет самый простой подход к сохранению и восстановлению выбора?

1 ответ

Решение

Как вы поняли, NSTableView не сохраняет автоматически выбор.

Самый простой способ - привязать NSTableView"s selectionIndexes на ваш Array Controller"s selectionIndexesи сохранять / извлекать значения из NSUserDefaults, Затем вы можете связать контроллер массива selectionIndexes к Shared User Defaults Controller (с ключом контроллера values и вы можете назвать свой Model Key Path что-нибудь). Так как NSIndexSet должен быть заархивирован / разархивирован для хранения, используйте NSKeyedUnarchiveFromData преобразователь стоимости. Это само по себе должно работать.


Если у вас возникли проблемы, как у меня, с сбросом индексов выбора, потому что табличное представление не заполнялось сразу (я сомневаюсь, что у вас возникнут эти проблемы, потому что вы заполняете привязками), вы можете сохранить значения по умолчанию вручную.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSKeyedArchiver archivedDataWithRootObject:self.arrayController.selectionIndexes] valueForKey:vvLastSavedSelectionIndex];

И получить их:

NSIndexSet *selectionIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] valueForKey:vvLastSavedSelectionIndex]];
[self.arrayController setSelectionIndexes:selectionIndexes];
Другие вопросы по тегам