Используя Хранение документов с iCloud
Базовые Данные основанные на документе приложения для iOS комбинируют питание и гибкость Базовых Данных с ориентированной на документы парадигмой. Вы используете UIManagedDocument
объекты, что каждый управляет всем Базовым Стеком данных. Следуйте стратегии реализации в этой главе для сохранения управляемых документов облаку. Используя эти инструкции, Вы будете учиться как:
Создайте и откройте управляемые документы
Используйте управляемые документы
Сохраните управляемые документы к iCloud
Удалите управляемые документы
По умолчанию, UIManagedDocument
класс использует транзакционное персистентное хранение SQLite. Поэтому после создания управляемого документа посмотрите Реакцию на События iCloud, чтобы изучить, как послушать и реагировать на события iCloud.
Создание и открытие управляемых документов
Управляемый документ представлен на диске как пакет файла, и это включает свое собственное Базовое Хранилище данных в пакете. Вы сохраняете управляемые документы к контейнеру повсеместности для сохранения их к iCloud. Перед использованием контейнера повсеместности Вашего приложения посмотрите То, чтобы позволять Поддержка iCloud изучить, как сконфигурировать iCloud для Вашего приложения.
Конфигурирование управляемых документов
Чтобы создать или открыть управляемый документ, Вы инициализируете a UIManagedDocument
объект с расположением за пределами контейнера повсеместности Вашего приложения.
Если Вы создаете новый управляемый документ, выбираете расположение для сохранения документа в приложении Documents
подкаталог. Иначе, используйте расположение существующего управляемого документа. Наконец, используйте NSFileManager
класс, чтобы решить, необходимо ли создать новый документ или открыть существующий документ.
NSURL *documentURL = <#path in the Documents directory#> |
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:documentURL]; |
NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, |
NSInferMappingModelAutomaticallyOption: @YES}; |
document.persistentStoreOptions = options; |
if ([[NSFileManager defaultManager] fileExistsAtPath:[documentURL path]]) { |
// Open existing document |
} else { |
// Create new document |
} |
Создание управляемых документов
После конфигурирования управляемого объекта документа вызовите saveToURL:forSaveOperation:completionHandler:
метод на документе и передаче UIDocumentSaveForCreating
опция работы. Этот метод создает пакет файла управляемого документа в контейнере повсеместности Вашего приложения.
... |
if ([[NSFileManager defaultManager] fileExistsAtPath:[documentURL path]]) { |
... |
} else { |
[document saveToURL:documentURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { |
if (success) { |
// Begin using managed document. |
} else { |
// Handle the error. |
} |
}]; |
} |
Открытие управляемых документов
После конфигурирования управляемого объекта документа вызвать openWithCompletionHandler:
открыть его.
... |
if ([[NSFileManager defaultManager] fileExistsAtPath:[documentURL path]]) { |
[document openWithCompletionHandler:^(BOOL success) { |
if (success) { |
// Begin using the managed document. |
} else { |
// Handle the error. |
} |
}]; |
} else { |
... |
} |
Используя контекст управляемого объекта управляемого документа
Для поддержки асинхронной записи данных Базовые Данные используют пару вложенных контекстов управляемого объекта: родительский контекст создается на частном потоке, и дочерний контекст создается на основном потоке. Вы получаете дочерний контекст от managedObjectContext
свойство. Поскольку необходимо обычно работать с дочерним контекстом, выполните все операции с помощью того контекста на основном потоке.
При необходимости можно загрузить данные из фонового потока непосредственно к родительскому контексту.
Можно получить родительское использование контекста parentContext
. При загрузке данных в родительский контекст Вы избегаете прерывать операции дочернего контекста. Можно получить данные, загруженные в фоновом режиме просто путем выполнения выборки.
В дополнение к получению уведомлений, обычно отправленных Базовыми Данными, приложения, использующие iCloud, получают дополнительные, специфичные для iCloud уведомления изменения состояния. Можно зарегистрироваться для получения этих уведомлений при необходимости в дополнительном понимании процесс персистентности iCloud. Если Ваш управляемый документ поддерживается SQLite-типом персистентное хранилище (значение по умолчанию), считайте Реакцию на События iCloud для приобретения знаний об ответе к персистентным событиям хранилища SQLite. Вместо этого при конфигурировании управляемого документа для использования атомарного хранилища, посмотрите Данные Ядра Использования Атомарные Хранилища для Маленького, Простого Хранения.
Сохранение управляемых документов
Для сохранения управляемого документа в iOS можно использовать любой из следующих подходов с наиболее рекомендуемым подходом, перечисленным сначала:
Используйте наследованное Автоматическое поведение Сохранения, предоставленное
UIDocument
суперкласс. Для большинства приложений этот подход обеспечивает хорошую производительность и низкий сетевой трафик.Если Ваш проект приложения требует явного управления при ожидании, изменения фиксируются, используют
UIDocument
методsaveToURL:forSaveOperation:completionHandler:
.Если Вы выполняете явную работу сохранения в поддерживающем iCloud приложении, знают, что Вы генерируете дополнительный сетевой трафик — умноженный на число устройств, подключенных к учетной записи iCloud.
Если у Вас есть конкретный случай, в котором ни одна из двух предыдущих работ подходов, таких как импорт большого количества данных в фоновом режиме, можно явно сохранить внутренний контекст документа. Когда Вы делаете, имеете в виду, что управляемый документ имеет два контекста. Тот, который это представляет Вам, является фактически дочерним элементом второго контекста, который документ использует внутренне для передачи с Базовым Хранилищем данных документа.
При сохранении только общедоступного контекста документа Вы не передаете изменения в хранилище; Вы все еще заканчиваете тем, что полагались на Автоматическое Сохранение. Для явного сохранения внутреннего контекста документа явно сохраните оба контекста. Для получения дополнительной информации читайте Изменения Сохранения в Базовом Руководстве по программированию Данных.
При сохранении внутреннего контекста непосредственно Вы обходите другие важные операции, которые выполняет документ.
Удаление управляемых документов
Для удаления управляемого документа сначала закройте документ. Тогда удалите следующие два каталога, с помощью скоординированных операций записи:
Каталог для Базовых журналов изменений Данных для управляемого документа
Пакет файла управляемого документа
Для получения расположения каталога, содержащего файлы журнала изменений, просмотрите документ DocumentMetadata.plist
файл списка свойств. Получите имя и URL, который Вы устанавливаете при создании документа.