使用 Restkit MainQueueManagedObjectContext 的奇怪崩溃 - EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】使用 Restkit MainQueueManagedObjectContext 的奇怪崩溃 - EXC_BAD_ACCESS【英文标题】:Weird crash using Restkit MainQueueManagedObjectContext - EXC_BAD_ACCESS 【发布时间】:2014-03-30 13:52:42 【问题描述】:

有时当我在 RestKit MainQueueManagedObjectContext 上调用 saveToPersistent 时,我收到以下错误并且应用程序崩溃。

CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  -[UIBarButtonItem controllerWillChangeContent:]: unrecognized selector sent to instance 0x21e70300 with userInfo (null)

[UIBarButtonItem controllerWillChangeContent:]: unrecognized selector sent to instance 0x21e70300 with userInfo (null)

似乎存在某种线程问题。

我通过这样的方法保存上下文:

- (BOOL)saveMainContext

    __block BOOL contextSaved = NO;
    [[[[CoreDataManager sharedInstance] objectStore] mainQueueManagedObjectContext] performBlockAndWait:^
        NSError *error = nil;
        if ([[[[CoreDataManager sharedInstance] objectStore] mainQueueManagedObjectContext] saveToPersistentStore:&error]) 
            contextSaved = YES;
        
    ];

    return contextSaved;

它在使用 EXC_BAD_ACCESS 的 saveToPersistent 方法上崩溃。 我该如何解决这个问题,我的 NSFetchresultscontroller 在 UIBarButtonItem 上调用方法的原因可能是什么?

【问题讨论】:

【参考方案1】:

您的 saveMainContext 方法只能从主线程调用,并且应该简单地实现为:

- (BOOL)saveMainContext

    NSError *error = nil;
    if ([[[[CoreDataManager sharedInstance] objectStore] mainQueueManagedObjectContext] saveToPersistentStore:&error]) 
        contextSaved = YES;
     else 
        NSLog(@"Save error: %@", error);
    

    return contextSaved;

调用UIBarButtonItem 的实例表明您存在内存管理问题,因为观察上下文保存的东西在释放之前没有自行删除。检查所有观察者。

【讨论】:

以上是关于使用 Restkit MainQueueManagedObjectContext 的奇怪崩溃 - EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 与直接 CoreData

不安地使用 RestKit

使用多个基本 URL 和多个对象管理器 (RestKit)

Restkit 0.20.x cocoapods 安装问题 - 编译但找不到 RestKit 的导入

使用cocoapods的restkit项目集成错误

RestKit:无法使用 coredata 执行映射