UIManagedDocument создает пакеты (папки), а не атомарные хранилища. Магазин все еще там, но его похоронили в упаковке. Если вы щелкните правой кнопкой мыши файл, созданный в папке «Документы» в симуляторе, вы сможете увидеть структуру. По умолчанию
mydocument.foo
-> StoreContent
-> persistentStore
Что вам нужно сделать, это создать новое расширение для типа файла вашего приложения, так что, например, если расширение вашей базы данных .myappdb
, вам нужно создать новый тип документа в настройках вашего проекта, который может быть .myappdbw
. Вы можете скопировать все настройки из записи для .myappdb
Далее, в точке, где вы обрабатываете открытие унаследованного документа по адресу mydocumenturl
, вместо того, чтобы передавать его координатору постоянного хранилища, вы создаете структуру каталогов выше. * * 1010
NSURL *newurl = [[mydocumenturl URLByDeletingPathExtension] URLByAppendingPathExtension:@"myappdbw"];
NSURL *desturl = [newurl URLByAppendingPathComponent:@"StoreContent"];
[[NSFileManager defaultManager] createDirectoryAtURL:desturl withIntermediateDirectories:YES attributes:nil error:NULL];
NSURL *finalurl = [desturl URLByAppendingPathComponent:@"persistentStore"];
, а затем переместите устаревшую базу данных в созданную вами систему папок
[[NSFileManager defaultManager] moveItemAtURL:mydocumenturl toURL:finalurl error:NULL];
и затем вы можете передать URL пакета в UIManagedDocument
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:newurl];
Ссылка, которая будет полезна для интеграции с iCloud:
http://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html
Все это немного загадочно, так как большая часть обещанного примера кода так и не появилась, но, с другой стороны, его довольно просто вывести. Посмотрите сессии WWDC2011 107,116 и 315 для получения дополнительных подсказок.
Но учтите, что если вы собираетесь использовать этот метод для переноса устаревших документов DONT , установите NSPersistentStoreUbiquitousContentNameKey
в точке, которую вы переносите, потому что пакет меняется, когда вы это делаете. Документ выше описывает это довольно хорошо.