к вашему первому вопросу, когда можно автоматически закрыть UIManagedDocument? есть простой ответ: «Когда iOS сочтет нужным». Другими словами, у вас нет контроля, когда это может произойти (если вы не закрываете его самостоятельно, но это не главное). Но вы все равно можете ответить на эту ситуацию.
В частности, в файле AppDelegate, вы можете включить строку, чтобы сохранить документ в
- (void)applicationWillResignActive:(UIApplication *)application
(не обязательно, если вы используете UIManagedDoc)
Теперь, ваше приложение должно также контролировать UIManagedDocument изменяет, как объяснено в документе here, строка «Добавление наблюдателя от уведомления UIDocumentStateChangedNotification»
На ваш второй вопрос ответ ДА. Пример: если у вас длинная фоновая операция и пользователь выключил свой телефон, документ будет закрыт. Поскольку вы работаете с UIManagedDocument, сохранение выполняется автоматически, поэтому вам не стоит беспокоиться о том, чтобы он был в непоследовательном состоянии.
Если приложение переходит в фоновое состояние, а то, что находится между stuff1 и stuff2, имеет решающее значение для вашего приложения - например, заполнение новых данных - тогда вы должны подумать о брекетинге наиболее важной части в фоновой задаче.
к вашему третьему вопросу, восстанавливающемуся из предыдущего состояния, это действительно зависит от приложения. Apple выпустила много документации, here. Это необходимо использовать в сочетании с надлежащим ответом на изменение состояния UIManagedDocument, включая конфликты.
К вашему последнему вопросу ответит NO нормальный условиях, а ДА - в противном случае - низкая память, закрытие телефона - даже если ваше приложение находится на переднем плане.
Таким образом, вы не можете контролировать, когда приложение прекращается (батарея разряжается, ОС выключается?), Но вы по-прежнему можете реагировать на изменения UIManagedDocument или изменения жизненного цикла приложения таким образом, чтобы вы должны сохранить целостность данных.
EDIT: Спасибо, не подумал, что он полностью ответил на ваш вопрос. На всякий случай, сообщение, на которое вы ссылаетесь в своем первоначальном вопросе, очень хорошо справляется с тем, чтобы выложить важный суф. в частности, я принял это почти дословно, а также добавил свои собственные уведомления, чтобы рассказать о том, когда и как они должны обновляться. Не всегда приятно полагаться на механизмы Apple DataSource, поскольку иногда это может привести к условиям гонки, которые очень трудно устранить (если вы обновите представление, если оно не видно, например ..).
Таким образом, в этих двух методов
- (void)objectsDidChange:(NSNotification *)notification
{
#ifdef DEBUG
NSLog(@"NSManagedObjects did change.");
#endif
}
- (void)contextDidSave:(NSNotification *)notification
{
#ifdef DEBUG
NSLog(@"NSManagedContext did save.");
#endif
}
информационное поле пользователя в уведомлении сообщает вам, что это было сделано в документ, например:
userInfo = {
inserted = "{<the Core data fields inserted>}";
updated = "{<code data fields updated>}";
}}
, а затем обновить взгляды я считаю нужным , Например, если вы получаете новые данные с удаленного сервера, вы можете подсчитать количество новых вставленных полей и обновить количество значков. Или отправьте уведомление, чтобы обновлять только один вид и т. Д.
Согласование данных по представлениям с UIManagedDoc непросто, но как обновлять данные без генерации побочных эффектов оказалось очень сложным.
удачи!