1

このコードは致命的ではない例外で壊れていますが、重大なエラー情報は提供されていません。これは、コア データ エンティティが更新された後です。

-(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).が表示されます。

例外の原因を特定するために手元にあるツールを見つけようとしています。もちろん、例外の原因についてのアイデアも役に立ちます。

4

0 に答える 0