使用 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的主要内容,如果未能解决你的问题,请参考以下文章