5

時折、次のエラーが表示されます。

EXC_BAD_ACCESS Code: KERN_INVALID_ADDRESS at 0x13421772123

以下の save: 行で発生します (CoreDataController シングルトン クラス内)。

    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        }
    }

これは多くのコードではないことはわかっていますが、経験から、これには一般的な原因があり、これがアプリをクラッシュさせないようにする方法はありますか?

4

1 に答える 1

21

managedObjectContext がメイン コンテキストの場合は、メイン スレッドで呼び出す必要があります。バックグラウンド スレッドで呼び出す場合は、次のコードでラップしてみてください。

NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

if (managedObjectContext != nil) {
    [managedObjectContext performBlockAndWait:^{
        NSError *error = nil;
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        }
    }];
}
于 2013-09-26T01:40:22.460 に答える