调用managedObjectContext保存时EXC_BAD_ACCESS

时间:2013-09-26 00:26:03

标签: ios core-data exc-bad-access

偶尔我会收到此错误:

EXC_BAD_ACCESS Code: KERN_INVALID_ADDRESS at 0x13421772123

它发生在下面的save:行(在CoreDataController单例类中)

    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        }
    }

我知道这不是很多代码,但是从经验来看,这有什么常见的原因,以及任何阻止这个应用程序崩溃的方法吗?

1 个答案:

答案 0 :(得分:19)

如果managedObjectContext是主要上下文,那么你应该在主线程中调用它,尝试用下面的代码包装它,如果你在后台线程中调用它

NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

if (managedObjectContext != nil) {
    [managedObjectContext performBlockAndWait:^{
        NSError *error = nil;
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        }
    }];
}