2

私の質問はこれに似ていますが、さらに明確にする必要があります。私はしばしばこのようなコードの間に例外を受け取ります:

NSError* error;
if (![managedObjectContext save:&error]) {
    NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
}

ただし、ブレークポイントをに入れるobjc_exception_throwと、例外がスローされていることがわかりますsave

(gdb) po [$eax name]
NSInternalInconsistencyException
(gdb) po [$eax description]
optimistic locking failure

ドキュメントには、楽観的ロックの失敗は例外ではなくエラーを返すと書かれているので、私はこれを期待していません。

余談ですが@try ... @catch (NSException * e)、コードでこの例外をキャッチすることすらできないようです。それはすべて奇妙です。

4

1 に答える 1

2

objc_exception_throwCore Data で内部例外をキャッチしていると思いますが、実際にはアプリに浸透していません。マージ ポリシーを設定したため、ロックの失敗がオブジェクトのマージに変換され、すべて問題ありません。

例外の前に何が起こっているかを確認できるように、おそらく使用する必要もcommittedValuesForKeys:あります..これは毎回発生するわけではありません。

于 2010-01-08T15:42:00.017 に答える