0

Core Data ストアに新しい NSManagedObject を追加した後、次の呼び出しを試みました。

    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {

次の例外が発生しました(奇妙なことに、エラーはなく、結果も肯定的でした!)

2013-03-15 18:32:09.753 Nick copy[28782:3407] CoreData: Ubiquity: ログ ファイルのエクスポート中に例外が発生しました: NSInternalInconsistencyException 保存通知の内容: NSConcreteNotification 0x3891b0 {name = _NSSQLCoreTransactionStateChangeNotification; object = (URL: ファイル://localhost/var/mobile/Applications/FCAF7FC6-7DC8-4E0B-A114-38778255CA90/Documents/MyApp.sqlite); userInfo = { "_NSSQLCoreActiveSaveRequest" = ""; "_NSSQLCoreTransactionType" = 2; "_NSSQLCoreTransientSequenceNumber" = 1; }}

「保存」メソッドからすべての例外をキャッチでき、アプリは正常に動作します。完全に安全ではないと感じているので、これが本当に節約できるかどうか疑問に思っています.

編集: オブジェクトを削除しようとするときの別の例外:

Catched Exception: Failed to process pending changes before save.  The context is still dirty after 100 attempts.  Typically this recursive dirtying is caused by a bad validation method, -willSave, or notification handler.
4

2 に答える 2

0

残念ながら、スレッドが見つかりませんが、NSManagedObjectクラスは、それらが作成されたthread/dispatch_queueでのみ常に使用する必要があると言われました。

問題は、別のキューからアクセスすると、ランダムな間隔で機能したりクラッシュしたりする可能性があることです。

専用のdispatch_queueからのみNSManagedObjectを呼び出し、それ以降、奇妙な例外をログに記録していないことを確認しました。

于 2013-03-19T17:51:31.170 に答える
0

安全ですか?おそらくそうではありません。このエラーは、基になるユビキタス システムが SQL ログ ファイルの作成に失敗したことを示しています。これはおそらく、iCloud が変更を同期するために使用するトランザクション ログの作成に失敗したことを意味します。それをキャッチして続行すると、フレームワーク コードの詳細に応じて、データがローカルに保存される可能性があります。ただし、変更が iCloud によって同期されないことはほぼ確実です。さらに悪いことに、同じ理由で将来の保存も失敗する可能性があります。

2 番目の例外については完全にはわかりませんが、最初の例外の副作用である可能性が非常に高いです。

Core Data の組み込みの iCloud サポートを iOS5 で使用しようとしている場合、これは奇妙で説明のつかないエラーの始まりにすぎません。私はかなりの量の iCloud/Core Data の作業を行ってきましたが、iOS 5 での使用は本当にお勧めできません。

于 2013-03-15T21:08:44.663 に答える