Ios 调用managedObjectContext save时EXC_访问错误
我偶尔会遇到这样的错误:Ios 调用managedObjectContext save时EXC_访问错误,ios,core-data,exc-bad-access,Ios,Core Data,Exc Bad Access,我偶尔会遇到这样的错误: EXC_BAD_ACCESS Code: KERN_INVALID_ADDRESS at 0x13421772123 它发生在下面的save:行(在CoreDataController单例类中) 我知道这不是很多代码,但根据经验,这有共同的原因吗?有什么方法可以防止它破坏应用程序?如果managedObjectContext是主上下文,那么你应该在主线程中调用它,尝试用以下代码包装它,以防你在后台线程中调用它 NSManagedObjectContext *manag
EXC_BAD_ACCESS Code: KERN_INVALID_ADDRESS at 0x13421772123
它发生在下面的save:行(在CoreDataController单例类中)
我知道这不是很多代码,但根据经验,这有共同的原因吗?有什么方法可以防止它破坏应用程序?如果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]);
}
}];
}
是的,这是一个ARC应用程序。哪个线程正在运行此代码?NSManagedObjectContext队列崩溃从com.apple.root.background-priority调用您是否在创建NSManagedObjectContext的线程以外的线程上使用它?感谢您的建议。我明白了:将“NSError*const\uu strong*”发送到类型为“NSError*\uuu autoreleasing*”的参数更改保留/释放指针的属性刚将错误声明移动到块以避免错误,请参阅更新的代码。另一种方法是将错误声明为“块NSError*error=nil”;现在将其标记为正确,因为我还没有崩溃;显然,我用这个方法替换了saveContext方法中的代码,现在每次调用[self-saveContext]它都会崩溃。怎么办!?这对我来说仍然很糟糕。有人有办法吗?
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
[managedObjectContext performBlockAndWait:^{
NSError *error = nil;
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}];
}