Я использую новый API iOS 7 для синхронизации Core Data с iCloud. Это довольно простой и понятный API, но я не могу найти рабочий способ отключить его и снова использовать локальное хранилище. Без потери данных.
Я создаю свой iCloud persistantStore
вот так. Это работает как шарм.
[[context persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:[self iCloudFilePath]] options:@{ NSPersistentStoreUbiquitousContentNameKey: @"Favorite" } error:&error];
Однако я пытаюсь использовать новый API миграции для переноса магазина из магазина iCloud в локальный магазин следующим образом:
Метод 1 использует *icloudps в качестве хранилища, а метод 2 использует *ps в качестве хранилища.
NSPersistentStore *icloudps = [[[context persistentStoreCoordinator]
persistentStores] objectAtIndex:0];
NSPersistentStore *ps = [[context persistentStoreCoordinator]
addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:[icloudps URL] options:nil error:&error];
[[context persistentStoreCoordinator] migratePersistentStore:icloudps
toURL:[NSURL fileURLWithPath:[self filePath]]
options:@{ NSPersistentStoreRemoveUbiquitousMetadataOption: @YES }
withType:NSSQLiteStoreType error:&error];
Метод 1 приводит к этому сбою:
Завершение работы приложения из-за необработанного исключения «NSObjectInaccessibleException», причина: «CoreData не удалось выполнить ошибку для «0xd0000000000080002 x-coredata://153BBFEA-0319-4F10-AEA4-1DA12A21BFFF/Favorite/p2>»
Способ 2 в этом:
* Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "nil не является допустимым постоянным хранилищем"
Я понятия не имею, как заставить это работать. Надеюсь, кто-то может помочь.