Приложение прекратит уведомление и сохранит черновики (основные данные) - PullRequest
7 голосов
/ 16 ноября 2009

Если пользователь в данный момент находится в моем контроллере представления редактирования, я хочу иметь возможность сохранить изменения, когда пользователь закрывает мое приложение. Для этого я наблюдаю UIApplicationWillTerminateNotification общего приложения. В моем делегате приложения я использую метод applicationWillTerminate:, чтобы закрыть вещи и освободить все мои основные контексты данных.

Проблема, которую я обнаружил, заключается в том, что метод applicationWillTerminate: в делегате приложения вызывается до того, как любой наблюдатель отреагирует на уведомление UIApplicationWillTerminateNotification. Это означает, что мой базовый стек данных был освобожден и закрыт до того, как мой контроллер представления редактирования получает возможность что-либо сохранить!

Как это обычно преодолевается, потому что я не вижу пути!

Большое спасибо,

Michael

Ответы [ 2 ]

4 голосов
/ 16 ноября 2009

Редактировать: Первый (основанный на уведомлениях) подход, вероятно, не будет работать из-за внутренней работы циклов выполнения и уведомлений.

Если вы хотите придерживаться архитектуры, основанной на уведомлениях, вы на самом деле можете публиковать свои собственные уведомления из applicationWillTerminate:. Просто создайте свое собственное MyApplicationWillTerminate уведомление, а затем позвоните postNotification: на [NSNotificationCenter defaultCenter]. Затем зарегистрируйте контроллер редактирования для экземпляров MyApplicationWillTerminate вместо значения по умолчанию UIApplicationWillTerminateNotification.

Другой вариант - попросить делегата приложения сохранить экземпляр вашего контроллера редактирования, если он видим, а затем в applicationWillTerminate: сохранить новую информацию перед выпуском контекста Core Data. Однако это загрязняет делегат приложения дополнительными переменными экземпляра, поэтому может оказаться неоптимальным решением.

Последняя мысль: почему бы не сохранить приложение, какие бы изменения ни делались, когда пользователь их вносит? Таким образом, вам не нужно беспокоиться о закрытии приложения на полпути после редактирования фрагмента информации - изменения уже сохранены, и вы можете просто выпустить материал Core Data, как вы уже сделали. (Это может не подходить для вас; я действительно не могу сказать, не зная больше о структуре вашего приложения и о том, какие данные вы редактируете.)

0 голосов
/ 16 ноября 2009

Не уверен, но NSManagedObjectContext сохраняет свой координатор хранилища и объектную модель?В таком случае, не будет ли достаточно, чтобы ваш контроллер сохранил контекст управляемого объекта?

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