良い事実:
- サーバーからデータをダウンロードし、Core Dataスレッドの制限を介してデータを保存します。バックグラウンドのMOCが保存されると、メインのMOCがマージされます。
- すべての保存操作は問題ありません
- また、MOCのマージは問題なく行われます。
私が探しているバグ:
- NSFetchedResultsControllerを使用したUITableViewがアクティブな場合(つまり画面上)、保存が行われていると、AppDelegateのmergeChangesFromContextDidSaveNotification行に移動するSIGABRTでアプリがクラッシュします。
- 最も奇妙な部分は、FRCのデリゲートがnilの場合、またはView Controllerであるが、FRCデリゲートメソッドを実装していない場合、クラッシュは発生せず、問題はないということです。 。しかし、デリゲートメソッドのいずれかを実装すると(コードが1行もなく、空の場合でも)、同じバグでアプリがクラッシュします。これは、メソッドが起動されていないことを意味します。問題は、これらのメソッド内のコードにはありません。
- 最も奇妙なパート2 (以下の更新2を確認):クラッシュはa
[__NSCFNumber length]: unrecognized selector sent to instance
で発生し、CoreDataManagerでもAppDelegateクラスでも「length」プロパティを呼び出さない
目撃者:コンソール
<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
いくつかのコード-MOCのマージ
- (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 ゾンビを有効にしても役に立たなかった=(