我正在开发一个 iOS 项目,该项目使用我的不同版本的核心数据处理迁移。
我还尝试在 catch 中包围 if 语句,它返回一个 sqlite 错误代码 522。
这里有什么问题吗?
我的以下代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory]
URLByAppendingPathComponent:@"coredatadb.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]){
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
[__persistentStoreCoordinator release];
__persistentStoreCoordinator = nil;
return [self persistentStoreCoordinator];
}
return __persistentStoreCoordinator;
最佳答案
通过更改日志记录模式,您只能避免问题,而不能解决问题。新的日记模式为您的应用带来速度等优势。
真正的问题是您只删除了 1 个文件,而不是该模式下使用的所有 3 个文件。不仅有您的 coredatadb.sqlite,还有 coredatadb.sqlite-shm 和 coredatadb.sqlite-wal 文件。关于模式和预写的一些东西,查看 Core Data 上的 WWDC 2013 视频了解详细信息。 [更新:它从 https://developer.apple.com/videos/play/wwdc2013/207/ 的第 40 分钟开始。视频]
要解决您的问题,您应该删除 Documents 目录中以“coredatadb.sqlite”开头的所有文件,然后一切又变得轻松简单了;-)
iOS 9 更新:现在使用 destroyPersistentStoreAtURL 或 replacePersistentStoreAtURL 更容易也更安全。请参阅 WWDC 2015 session 220_hd_whats_new_in_core_data。
关于iphone - persistentstorecoordinator sqlite 错误代码 :522 'not an error' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277092/