好事实:SIGABRT在NSFetchedResultsController委托方法mergeChangesFromContextDidSaveNotification后
- 我从服务器下载数据,并通过核心数据线约束,保存数据,并在后台MOC被保存时,主要的MOC被合并。
- 所有的保存操作去确定
- 此外商务部的合并发生,没有任何问题
的错误我在捉:
- 当我与NSFetchedResultsController的UITableView活跃(即在屏幕上),并且正在进行保存,该应用程序崩溃了一个SIGABRT,它将我带到AppDelegate中的mergeChangesFromContextDidSaveNotification行。
- 什么是最奇怪的部分是,当FRC的代表是零,或当它是我的视图控制器,但我没有实现任何FRC委托方法时,崩溃不会发生,我不有什么问题。但是当我实现任何委托方法(甚至是空的,没有一行代码)时,该应用程序崩溃的同一个错误。 这意味着该方法甚至没有被解雇,问题不在于这些方法的代码。
- 最奇怪的部分2 (检查更新2下):碰撞发生了
[__NSCFNumber length]: unrecognized selector sent to instance
,我不叫任何“长”属性在我CoreDataManager无论是在我的AppDelegate类
证人:控制台
<CoreDataManager.m:(338)> Saved data from server
<AppDelegate.m:(352)> Will merge
<CoreDataManager.m:(338)> Saved data from server
<AppDelegate.m:(355)> Did merge
<CoreDataManager.m:(338)> Saved data from server
<AppDelegate.m:(352)> Will merge
<AppDelegate.m:(355)> Did merge
<CoreDataManager.m:(338)> Saved data from server
<CoreDataManager.m:(338)> Saved data from server
<CoreDataManager.m:(338)> Saved data from server
<MyTableViewController.m:(134)> Fetched results controller did fetch
<CoreDataManager.m:(338)> Saved data from server
<CoreDataManager.m:(338)> Saved data from server
<CoreDataManager.m:(338)> Saved data from server
<AppDelegate.m:(352)> Will merge
<CoreDataManager.m:(338)> Saved data from server
[__NSCFNumber length]: unrecognized selector sent to instance 0x13318050
一些代码 - 合并MOCS
- (void)managedObjectContextDidSave:(NSNotification *)notification
{
NSManagedObjectContext *sender = (NSManagedObjectContext *)[notification object];
if ((sender != self.managedObjectContext) &&
(sender.persistentStoreCoordinator == self.managedObjectContext.persistentStoreCoordinator))
{
dispatch_async(dispatch_get_main_queue(), ^{
DebugLog(@"Will merge");
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
DebugLog(@"Did merge");
});
}
}
更新1
继Cocoanetics暗示,我创建了一个NSNumber的类别,以检查是谁打来的length
。我得到你在下面看到的,并在崩溃[__NSCFNumber _fastCStringContents:]:无法识别的选择器发送到实例。
更新2 启用僵尸没有帮助=(
感谢您的回答,请检查编辑。 –
它总是[NSNumber长度]?尝试在NSNumber上创建一个类别并实现一个空长度方法。然后在那里放置一个中断点,并检查堆栈跟踪在哪里被调用。 – Cocoanetics
是的,永远。我会尝试,再次感谢。 –