Автосохранение с какао и основными данными - PullRequest
12 голосов
/ 30 сентября 2009

Я работаю над приложением Core Data без документов.

Я бы хотел, чтобы изменения сохранялись по мере их поступления. Это то, что пользователь ожидает в этом типе приложения. Это также то, что Apple реализовала в iPhoto или iTunes .

Подход с использованием грубой силы заключается в настройке таймера для частого сохранения. Метод, вызванный сохранением, затем поглотит все ошибки проверки, чтобы не беспокоить пользователя. Только после выхода пользователь будет прослушан, чтобы упорядочить данные, чтобы он мог сохранить. ИМХО, такой подход воняет.

Так что я думаю, должен быть способ каким-то образом привязать сохранение к чему-то вроде протокола NSEditor. Каждый раз, когда пользователь (или контроллер) заканчивает редактирование данных, делегат приложения должен как-то уведомляться о срабатывании операции сохранения. Дело в том, что я не совсем знаю, где искать.

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

1 Ответ

15 голосов
/ 02 октября 2009

В конце каждого события в приложении AppKit CoreData будет запускать -processPendingTransactions для вас.

Одним из побочных эффектов этого является то, что если вы зарегистрировались в NSManagedObjectContext для получения уведомлений об изменениях, вам будут звонить в конце каждого события.

Так, например, в вашем обработчике уведомлений вы можете просто позвонить и сообщить контекст для сохранения.

Тем не менее, вы можете быть параноидально относиться к сохранению контекста, находясь в режиме обратного вызова из этого же контекста, поэтому вам, вероятно, будет лучше, если вы выполните executeSelector: @selector: @selector (save :) afterDelay: нажать кнопку save до тех пор, пока не завершится -processPendingTransactions.

Вы можете даже сделать предыдущую отмену в селекторе -save: и иметь задержку, равную 5 секундам, поэтому, если пользователь или приложение находится в середине группы изменений, они все объединятся в одно сохранение.

И, собственно, именно так работала Delicious Library 1.0-1.09.

-Wil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...