Цель c - Подход к сохранению основных данных

У меня в приложении есть подкласс NSManagedObject, и я пытаюсь понять, когда и как сохранять изменения.
Я попытаюсь объяснить сам, например, класс A является подклассом NSManagedObject.
В жизненном цикле приложения я так и делаю. :

App launched
...
Create an instance of class A
...
Change some properties of A instance
...
App go to background
...
App becomes active again
...
Change some more properties of A instance
...
App terminates

Когда мне нужно вызывать [context save:] ??
Нужно ли вызывать его после каждого изменения в экземпляре A? Или, может быть, я вызываю его только тогда, когда приложение переходит в фоновый режим?
Должен ли я вызывать его после создания или удаления любого экземпляра A?


person Eyal    schedule 04.06.2012    source источник


Ответы (3)


Хороший подход — поместить UIManagedDocument в ваш AppDelegate. Затем вы можете вызывать [сохранение контекста] всякий раз, когда в приложении происходят какие-либо изменения (например, сбой). Порядок, которому я предпочитаю следовать, примерно такой:

  1. Создайте объект UIManagedDocument (в приложении загружается или где-либо еще) и назначьте его свойству
  2. Настройте документ (проверьте, существует ли он на диске или уже открыт и т. д. и отреагируйте соответствующим образом)
  3. Передайте UIManagedObjectContext исходному UIViewController в вашем приложении (оттуда вы можете передать контекст другим контроллерам представления)

Документ UIManaged сохранит для вас контекст.

Взгляните на документацию UIManagedDocument, чтобы настроить параметры постоянного хранилища (вы отправляете NSDictionary параметров в свой экземпляр UIManagedDocument, см. первый пример по ссылке ниже).

Документация UIManagedDocument: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html

Также см. лекцию CoreData и демонстрацию (лекции 13 и 14) курса разработки приложений для iPhone и iPad с Полом Хегарти, доступного бесплатно на iTunesU (осень 2011 г.).

person Patrick Borkowicz    schedule 04.06.2012

Данные не будут сохранены в постоянном хранилище, пока вы не вызовете save. Итак, это зависит от того, что вы хотите в своем приложении. Если вы хотите, чтобы он мог восстановить последнее значение, которое у него когда-либо было, вам следует сохранять после каждой модификации.

Простое изменение — просто сохранить после внесения изменений.

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

Но это то, что UIManagedDocument делает автоматически для вас, поэтому вы можете просто использовать его вместо этого.

person Jody Hagins    schedule 04.06.2012

В зависимости от количества изменений, которые вы делаете, и объема данных, которые необходимо сохранить при каждом изменении, вы можете сохранить немного или много. Если вы просто сохраняете строку, или число, или логическое значение, тогда продолжайте и вызовите save: в вашем контексте, как только изменения будут внесены.

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

Тим

person timthetoolman    schedule 04.06.2012