Контекст управляемых объектов
Контекст управляемых объектов сохраняет новые или измененные данные.
Мы использовали контекст управляемых объектов для загрузки информации о преступниках, но он также отвечает за координацию сохранения. Вы еще не забыли, что NSManagedObject отслеживает изменения в сущностях? Контекст управляемых объектов может сообщить вам о наличии изменений в объектах, находящихся под его управлением. При создании нового экземпляра NSManagedObject необходимо сообщить ему, какому контексту управляемых объектов он принадлежит, а контекст узнает о новых сущностях, которые должен отслеживать. Шаблон Core Data использует данные при выходе из приложения для проверки наличия новых или измененных данных. Если данные будут обнаружены, приложение приказывает контексту сохранить их.
Вы сказали, что при создании новых экземпляров NSManagedObject необходимо сообщать им, какому контексту управляемых объектов они принадлежат.
Как это сделать?
Это часть описания сущности, о котором упоминалось выше. Если вам потребуется создать новый экземпляр NSManagedObject, выполните следующий фрагмент: [NSEntityDescription insertNewObjectFor- EntityForName:@"Fugitive" inManagedObject- Context:managedObjectContext];. Контекст управляемых объектов предоставляется изначально.
Что означает строка «&еггог», передаваемая при вызове save?
Многие операции загрузки/сохранения Core Data содержат ссылку на объект NSError на случай, если что-то пойдет не так. Символ «&» в Objective-C работает так же, как в языках С и C++: он возвращает «адрес» объекта. Мы объявляем указатель на NSError и передаем адрес этого указателя методу save. Если вызов завершится неудачей, Core Data заполняет аргумент более подробной информацией об ошибке.
Раз уж речь зашла об ошибках, что делать при их возникновении?
Зависит от приложения. В зависимости от того, когда будет обнаружена проблема, можно предупредить пользователя и попытаться продолжить работу приложения; в других случаях сделать вообще ничего нельзя. Например, если ошибка происходит в методе applicationWillTerminate, в лучшем случае можно уведомить пользователя о неудачной попытке сохранения и, возможно, попытаться сохранить данные в другом месте.
Значит, save следует вызывать только в applicationWillTerminate?
Вовсе нет. Шаблон Core Data организовал такой вызов для удобства, а вообще сохранение должно выполняться тогда, когда это уместно в вашем приложении. Если для работы с данными используется БД SQLite, операция сохранения выполняется намного быстрее, чем при использовании списков plist в DrinkMixer. Постарайтесь как можно скорее сохранять новые и измененные данные, чтобы свести к минимуму риск потери данных.
- Дата: 4-01-2015, 15:09