このコードは致命的ではない例外で壊れていますが、重大なエラー情報は提供されていません。これは、コア データ エンティティが更新された後です。
-(void) commitBackgroundChangesAndNotify:(NSString *)notification{
    NSLog(@"enter commit");
    if([self.backgroundMOC hasChanges]) {
        NSError *error = nil;
        if (!([self.backgroundMOC save:&error])){     // breaks here
            NSLog(@"Unresolved Error %@ %@", error, [error userInfo]);
        } 
//        [[NSNotificationCenter defaultCenter] postNotificationName:notification object:nil];
    }   
    NSLog(@"exit commit");
}
ブレークポイントを有効にしているかどうかに関係なく、デバッガーで中断します。デバッガーなしで実行すると、正常に実行されているように見えます。
このコードは、NSOperation 中に数回実行されます。操作中に、保存のために 2 回目に呼び出されたときに中断が発生します (つまり、コンテキストへの変更は既に 1 回正常に保存されています)。変更とコミットが行われているのと同じスレッドで backgroundMOC が作成されたことを確認しました。これは NSOperation のスレッドです。mocのinsertObjects、updatedObjects、deletedObjectsのカウントも調べました。これらはすべて正しく見えます。
呼び出しコードは次のようになります。
- (void) calculateBoundsForSearch {
    NSArray *searchesArray = [currentSearchEntity.resultOfSearch allObjects];
    MyMKMapBounds bounds = [MapController calculateBoundsForArrayOfSearchResults:searchesArray];
    currentSearchEntity.minLatitude = [NSNumber numberWithFloat:bounds.min.latitude];
    currentSearchEntity.minLongitude = [NSNumber numberWithFloat:bounds.min.longitude];
    currentSearchEntity.maxLatitude = [NSNumber numberWithFloat:bounds.max.latitude];
    currentSearchEntity.maxLongitude = [NSNumber numberWithFloat:bounds.max.longitude];
    [dataInterface commitBackgroundChangesAndNotify:@"bounds"];
}
これは 2 つのオブジェクトによって呼び出されます。一つには、例外はありません。
コンソールの唯一の出力は次のとおりです。
2012-07-22 10:47:13.790 myApp[46578:17e07] enter commit
Catchpoint 7 (exception thrown).2012-07-22 10:47:21.160 myApp[46578:17e07] exit commit
これは致命的ではない例外です。私が理解していないことに気付いたのは、それが壊れたときに、それを乗り越えるために続行を2回クリックする必要があることです. 最初のクリック後にメッセージCatchpoint 7 (exception thrown).が表示されます。
例外の原因を特定するために手元にあるツールを見つけようとしています。もちろん、例外の原因についてのアイデアも役に立ちます。