2014-02-04 6 views
1

У меня есть приложение, к которому я хочу добавить поддержку iCloud. Это приложение загружает данные с сервера, и данные хранятся в CoreData, так что NSFetchedResultsController s может управлять UITableView с.Будет ли iCloud синхронизировать все данные CoreData при использовании CoreData в iCloud

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

Имеет ли смысл использовать Core Data в iCloud для синхронизации этих нескольких сохраненных элементов на разных устройствах? Я обеспокоен тем, что после того, как все представления таблицы будут заполнены временными данными, тогда устройство будет использовать пропускную способность, синхронизирующую эту информацию, когда это нежелательно.

+1

Означает ли название цитату из Mystery Men кому-либо еще? «Тот, кто занимается вопросами обучения, тренируется только по заданию вопросов». – Putz1103

ответ

3

Да, он синхронизирует все данные в магазине. Но есть нечто большее, чем история.

Вы указываете основные данные для использования iCloud при добавлении постоянного хранилища в постоянный координатор хранилища - используя правильные значения параметров при вызове addPersistentStoreWithType:configuration:URL:options:error:. Если вы укажете Core Data для использования iCloud здесь, все данные в этом постоянном хранилище будут синхронизированы.

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

Существует несколько различных способов борьбы с этим, в зависимости от того, как работает ваше приложение.

  • Если вы используете одни и те же типы сущностей Ядро данных в обоих упорных магазинах (т.е. синхронизированных и не-синхронизированные данные всех использует одни и те же объекты), вам необходимо сообщить своему управляемый объект контекста, который хранить его следует использовать для каждый новый объект. Вы делаете это, вызывая assignObject:toPersistentStore: в контексте при создании объекта.
  • Если вы используете разные объекты для разных хранилищ (т.е. синхронизированные данные используют один поднабор вашей модели данных, несинхронизированные данные используют другое подмножество), вы можете использовать разные конфигурации в модели данных, а магазин будет выбирается автоматически. Каждая конфигурация эффективно определяет именованное подмножество модели, которое содержит только некоторые из объектов. Используйте правильное имя конфигурации при добавлении постоянного хранилища, а новые объекты перейдут в соответствующий магазин.

Если данные, которые не должны синхронизироваться, действительно являются временными, рассмотрите возможность использования NSInMemoryStoreType при настройке несинхронизированного постоянного хранилища. Это использует больше памяти, но это также избавляет вас от необходимости удаления содержимого магазина. Когда приложение существует, хранилище в памяти просто исчезает. Если вы можете сэкономить память, это может быть намного удобнее в использовании. Они работают примерно одинаково (например, вы можете использовать NSFetchedResultsController), но они никогда не сохраняются в файле.

Смежные вопросы