问题:
我有一些非常简单的代码(如下)在“migratePersistentStore
”期间导致异常并显示错误消息
Exception:*** -[__NSArrayM replaceObjectAtIndex:withObject:]: object cannot be nil
代码:
NSPersistentStore * oldStore = [_persistentStoreCoordinator persistentStores][0];
if (oldStore) {
@try {
[_persistentStoreCoordinator migratePersistentStore:oldStore
toURL:[self storeURL]
options: @{ NSPersistentStoreRemoveUbiquitousMetadataOption : @YES }
withType:NSSQLiteStoreType error:&error];
}
@catch(NSException* ex) {
NSLog(@"Exception:%@", ex.description);
}
}
更多信息:
- 看来,如果没有数据存在,则不会发生异常。相反,相同的函数会设置错误,用户信息为“无法添加同一商店两次”。
- 我目前正在做一个简单的小项目来尝试重现这个问题,完成后我会在此处发布一个链接。
最佳答案
显然,当您的 iCloud URL 和本地 URL 相同时,Core Data 不喜欢迁移。我认为这应该无关紧要,因为实际上,iCloud 数据存储在它自己的目录中。但是,似乎在迁移过程中,使用相同的名称会导致问题。
简单的修复 - 只需做这样的事情:
- (NSURL *)storeURL {
NSURL * documentsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];
if (iCloudEnabled]) {
return [documentsDirectory URLByAppendingPathComponent:@"iCloudEventData.sqlite"];
} else {
return [documentsDirectory URLByAppendingPathComponent:@"EventData.sqlite"];
}
}
关于ios - 迁移核心数据存储时的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876784/