EXC_BAD_ACCESS上的NSManagedObjectContext保存方法在NSOperation和ARC中,为什么? [英] EXC_BAD_ACCESS on NSManagedObjectContext save method inside NSOperation and ARC, why?

查看:881
本文介绍了EXC_BAD_ACCESS上的NSManagedObjectContext保存方法在NSOperation和ARC中,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现一些问题,当保存NSManagedObjectContext在NSOperation内打开ARC。没有ARC一切都很好。它在保存期间总是提供EXC_BAD_ACCESS。代码如下:

I have found some problems when saving NSManagedObjectContext inside NSOperation with turned on ARC. Without ARC everything was fine before. It is always gives EXC_BAD_ACCESS during saving. The code looks like this:

//on the main thread
-(void)someFunc
{
    array = ... //fetching an array of entities from a core data
    for(SomeEntity * obj in array)
    {
         NSSomeOperation * op = [[NSSomeOperation alloc] initWithValue:[obj someField]];
         //start an operation
    }
}

//NSSomeOperation implementation
//...
- (void)main {
    //some code
    NSError * error = nil;
    [mainContext lock];
    if (![mainContext save:&error]) {    //<--- HERE EXC_BAD_ACCESS
       //process error
    }      
    [mainContext unlock];
    //some code
}
//...

使用[mainContext setRetainsRegisteredObjects:YES]和objectWithID无法解决此问题。

Using of [mainContext setRetainsRegisteredObjects:YES] and objectWithID don't resolve this issue.

EXC_BAD_ACCESS(代码= 1)

EXC_BAD_ACCESS 13)

EXC_BAD_ACCESS (code=1)
EXC_BAD_ACCESS (code=13)

-[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940

An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.

Objects saved = {
    inserted = "{(\n)}";
    updated = "{(\n    <SomeEntity: 0x7fc5c55b6220> (entity: SomeEntity; id: 0x7fc5c5052b20 ... )}"; } 
and exception = -[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940 with userInfo = (null)

我使用一个单独的托管对象上下文,

I use a separate managed object context and fetch my managed objects inside this NSOperation.

也许它是与核心数据错误或ARC有关的东西?也许ARC清理一些对象,必须保存
因为,没有ARC一切都很好,所有工作当我打开ARC - EXC_BAD_ACCESS。

Maybe it is something related to Core Data bugs or ARC? Maybe ARC cleans some of objects, that must be saved? Because, without ARC everything was fine, all worked. When I turned on ARC - EXC_BAD_ACCESS.

有人知道为什么会发生吗?

Does anyone know why it occurs?

推荐答案

也许ARC解除分配接收 NSManagedObjectContextDidSaveNotification 的对象,这会导致异常?
我有类似的东西,

Maybe ARC deallocates some object that receives NSManagedObjectContextDidSaveNotification and this causes the exception? I had something similar, and fixed it by making sure to removeObserver: before the object gets deallocated.

请注意,CoreData异常实际上隐藏了通知中心异常,因此您无法访问看到它。

Note that the CoreData exception actually hides the notification center exception, so you don't get to see it.

这篇关于EXC_BAD_ACCESS上的NSManagedObjectContext保存方法在NSOperation和ARC中,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆