На самом деле нет способа обойтись без UIDocument. Я попытался сделать это в одном из первых случаев использования iCloud, но без UIDocument это обернулось катастрофой. Поначалу использование UIDocument кажется лишней работой, но на самом деле это не так.
Вы можете легко создать подкласс UIDocument менее чем за час и заставить его работать с любым типом файла (просто установите для свойства content
значение NSData). Он также имеет ряд преимуществ по сравнению со стандартной файловой системой:
- Отслеживание изменений
- Разрешение файловых конфликтов
- Документ о государственной поддержке
- Расширенные функции сохранения / открытия / закрытия
Честно говоря, потратить всего час или два на чтение документации Apple, а затем ее использование стоит потраченного времени и сил. Хорошую начальную статью о хранилище документов iCloud можно найти в Документация Apple для разработчиков.
Я написал подкласс UIDocument, который будет работать с любым типом файла (в частности, с NSData). Вы можете просмотреть, загрузить и изменить код для подкласса UIDocument на GitHub.
Создайте документ:
// Initialize a document with a valid file path
iCloudDocument *document = [[iCloudDocument alloc] initWithFileURL:fileURL];
// Set the content of the document
document.contents = content;
// Increment the change count
[document updateChangeCount:UIDocumentChangeDone];
Сохраните существующий документ:
// Save and close the document
[document closeWithCompletionHandler:nil];
Сохраните новый документ:
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:nil];
Вы также можете синхронизировать все файлы, хранящиеся в iCloud, с помощью NSMetadataQuery. Apple предоставляет очень хороший пример использования запроса NSMetadata для синхронизации файлов приложения. Также не забудьте проверить iCloud перед выполнением этих операций (подсказка: используйте метод ubiquityIdentityToken
в NSFileManager).
Вы также можете рассмотреть возможность использования библиотеки с открытым исходным кодом, такой как iCloud Document Sync. Проект iCloud Document Sync упрощает хранение и синхронизацию файлов приложений:
Интегрируйте iCloud в проекты документов iOS с помощью методов однострочного кода. Быстро и легко синхронизируйте, загружайте, управляйте и удаляйте документы из iCloud. Помогает заставить iCloud «просто работать» и для разработчиков.
Практически в каждом методе синхронизации документов iCloud все, что вам нужно сделать, это передать данные файла в качестве параметра, а затем он обработает все остальное (сохранение, синхронизацию и т. Д.).
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Я участвую в разработке проекта с открытым исходным кодом iCloud Document Sync. Тем не менее, я считаю, что этот проект будет для вас выгоден и имеет отношение к этому вопросу. Это не продвижение или реклама.
person
Sam Spencer
schedule
16.11.2013