EXC_BAD_ACCESS上的NSManagedObjectContext保存方法在NSOperation和ARC中,为什么? [英] EXC_BAD_ACCESS on NSManagedObjectContext save method inside NSOperation and ARC, why?
问题描述
我发现一些问题,当保存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屋!