我正在将我的应用程序从 iOS 7 迁移到 iOS 8,当我尝试保存核心数据上下文时,我在 Xcode 中收到以下错误。 iOS 7 和 Xcode 5 中不存在此错误。它会在下面的行中抛出异常
NSError * saveError = nil;
if(![self.managedObjectContext save:&saveError])
{ // crash on save context line.
//error message.
}
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“recordChangeSnapshot:forObjectID ::全局ID在录制时可能不是临时的。
我正在主线程上接收数据并尝试将其保存在核心数据中。
以下是应用程序委托类中托管对象上下文的代码:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
// Returns the managed object model for the application.
// If the model doesn't already exist, it is created from the application's model.
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MCRM" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and the application's store added to it.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MCRM.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
and it crash in data manager class :
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
代码在 iOS7 和 Xcode5.1 中工作正常。
我已经尝试使用线程限制(-[NSManagedObjectContext init])来替换为 [NSManagedObjectContext initWithConcurrencyType:] 到 NSConfinementConcurrencyType 和 NSMainQueueConcurrencyType 以及 PerformBlockWithWait^{} 代码注入,但仍然面临问题。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)