Восстановление выделения в 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];