Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 调用managedObjectContext save时EXC_访问错误_Ios_Core Data_Exc Bad Access - Fatal编程技术网

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]);
        }
    }];
}