Подтвердить что ты не робот

Функция Lost with Window resume, автосохранение в пользовательских настройках и сохранение в модели для NSDocument

Я запустил небольшое приложение на основе документов с NSOutlineView в главном окне. Я сохранил свою модель в файлах, используя протокол NSCoding в классах моделей, и все в порядке.

Затем я захотел сохранить пользовательский интерфейс (размер и положение окна, расширенные элементы в виде схемы, выбор,...), и я обнаружил, что функция возобновления добавлена ​​в Lion.

Итак, я попытался реализовать его, я добавил имя автосохранения в основное окно и представление схемы, задал свойство autosaveExpandedItems и реализовал метод outlineView: itemForPersistentObject: и outlineView: persistentObjectForItem: в источнике данных представления схемы.

Это работает, но когда я создаю/открываю другой файл, а затем закрываю его, состояние расширенных элементов других файлов устанавливается с состоянием закрытого файла.

Это похоже на приложение, которое сохраняет только одно окно для всех документов, а не одно окно на документ.

Я немного потерялся с автосохранением и возобновлением, это одна и та же функция или две функции, совершенно разные?

Могу ли я использовать его для сохранения состояния окна или мне нужно сохранить его в моей модели?

Спасибо

4b9b3361

Ответ 1

Я понимаю, что это около 3 лет слишком поздно, но, возможно, это поможет всем, кто попадает сюда.

Я никоим образом не являюсь экспертом или профессиональным разработчиком Mac Cocoa (все еще изучаю), поэтому, боюсь, я могу лишь немного рассказать о себе (сам работая над документированным приложением).

Возможно, что реализация данных состояния сохранения для каждого окна и каждого элемента управления просто связывает его с одним экземпляром (поскольку все они предварительно загружены в xib и привязаны к одному имени автосохранения), но я может быть неправильным. Любой, кто знает больше, может исправить меня.

Возможно, попробуйте сохранить информацию о состоянии на уровне NSDocument вместо окна, а затем выполните window(window: NSWindow, willEncodeRestorableState state: NSCoder) и window(window: NSWindow, didDecodeRestorableState state: NSCoder), чтобы извлечь данные из вашего документа.

Вы можете, конечно, легко получить доступ к документу для текущего окна: view.window?.windowController?.document as? YourNSDocumentSubclass

Это более или менее то, что я делаю, и пока это кажется многообещающим. Другие архитектурные гуру могут предложить больше понимания.