Используя Хранение документов с iCloud

Базовые Данные основанные на документе приложения для iOS комбинируют питание и гибкость Базовых Данных с ориентированной на документы парадигмой. Вы используете UIManagedDocument объекты, что каждый управляет всем Базовым Стеком данных. Следуйте стратегии реализации в этой главе для сохранения управляемых документов облаку. Используя эти инструкции, Вы будете учиться как:

По умолчанию, 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 можно использовать любой из следующих подходов с наиболее рекомендуемым подходом, перечисленным сначала:

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

При сохранении только общедоступного контекста документа Вы не передаете изменения в хранилище; Вы все еще заканчиваете тем, что полагались на Автоматическое Сохранение. Для явного сохранения внутреннего контекста документа явно сохраните оба контекста. Для получения дополнительной информации читайте Изменения Сохранения в Базовом Руководстве по программированию Данных.

При сохранении внутреннего контекста непосредственно Вы обходите другие важные операции, которые выполняет документ.

Удаление управляемых документов

Для удаления управляемого документа сначала закройте документ. Тогда удалите следующие два каталога, с помощью скоординированных операций записи:

Для получения расположения каталога, содержащего файлы журнала изменений, просмотрите документ DocumentMetadata.plist файл списка свойств. Получите имя и URL, который Вы устанавливаете при создании документа.