アプリのバックアップ/復元機能を実装していますが、バックアップから sqlite ファイルを復元し、いくつかのデータにアクセスしようとすると、次のエラーが発生します。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Object's persistent store is not reachable from this NSManagedObjectContext's coordinator'
ARC の前に戻って、appdelegate の Core Data オブジェクトをゼロにすることができ、ManagedObjectContext にアクセスしようとすると再構築されていました。今はどうしていますか?
編集:
私は何か他の間違ったことをしているに違いありません。管理オブジェクト コンテキストを読み取り専用に設定できませんが、データにアクセスしようとすると同じエラーが発生します。何かアドバイス?
- (void)restoreDatabase {
ICAMAppDelegate *appDelegate = (ICAMAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.managedObjectContext = nil;
NSError *error;
// Delete Persistent Store
NSArray *stores = [[appDelegate persistentStoreCoordinator] persistentStores];
NSPersistentStore *store = [stores objectAtIndex:0];
NSURL *storeURL = store.URL;
[[appDelegate persistentStoreCoordinator] removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
NSString * databaseName = @"ICAMMobile.sqlite";
NSString * databaseBackupName = @"ICAMMobile.sqlite.bak";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *backupPath = [documentsDir stringByAppendingPathComponent:databaseBackupName];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:databaseName];
if([fileManager fileExistsAtPath:backupPath])
{
if (![fileManager copyItemAtPath:backupPath toPath:dbPath error:&error])
{
NSLog(@"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
else
{
[appDelegate.managedObjectContext reset];
}
}
}