我有一个使用Core Data的应用程序在模拟器上工作正常但在设备上崩溃。我看过有关将sqlite文件的读/写副本从主bundle复制到库中的帖子,但它仍然崩溃。当我保存新对象或修改现有对象时,它会崩溃,但只会在某些实体(但不是所有实体)上运行(?!)。它在模拟器上很好。在对象保存并弹出到委托视图控制器后得到的错误是:
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'ALL的左侧 或者任何运算符必须是NSArray或NSSet。'
我已将以下代码添加到AppDelegate中,但没有明显的效果:
NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"BCP" ofType:@"sqlite"];
NSURL *storeURL = [NSURL fileURLWithPath:dbPath];
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"BCP.sqlite"];
if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) {
// database doesn't exist in your library path... copy it from the bundle
NSError *error = nil;
if (![[NSFileManager defaultManager] copyItemAtPath:dbPath toPath:targetPath error:&error]) {
NSLog(@"Error: %@", error);
}
}