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

Автосохранение с помощью Cocoa и основных данных

Я работаю над нестандартным приложением Core Data.

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

-Wil