2011-04-14 7 views
3

SQLiteがサポートする管理対象オブジェクトコンテキストを保存しようとすると、時々エラーが発生します。コアデータSQLite制約が失敗しました

Error Domain=NSCocoaErrorDomain Code=256 "The operation couldn’t be completed. (Cocoa error 256.)" UserInfo=0x280170 {NSFilePath=/var/mobile/Applications/7773BDBD-C502-4E21-9632-FA36A109BF6E/Documents/Social.sqlite, NSUnderlyingException=error during SQL execution : constraint failed}, { NSFilePath = "/var/mobile/Applications/7773BDBD-C502-4E21-9632-FA36A109BF6E/Documents/Social.sqlite"; 
NSUnderlyingException = "error during SQL execution : constraint failed"; 
} 

これはバイナリデータストアでは発生しません。特定のエンティティを変更し、短期間に複数回コンテキストを保存する場合にのみ発生します。誰もこれをデバッグする方法を提案することはできますか?私はsqlite3で.sqliteファイルを見てきました。そして、nothingsが飛び出します。私はバイナリストアにエラーがないので、明示的なコアデータ制約違反(nullが必要な値など)だとは思わない。プログラムは複雑で(複数のスレッドで複数のコンテキストがあります)、ここに表示する簡単なコードでエラーを複製できませんでした。どのようにコアデータの背後にあるsqliteインスタンスからログアウトする方法についての任意のアイデア?

答えて

1

この保存は、それが制約されている親関係を認識していない別のスレッドのコンテキストで起こっている可能性があります(それは私の読み方です)。

つまり親レコードがスレッド3コンテキストに保存されてからメインスレッドのコンテキストとマージされますが、子レコードはスレッド5(または3以外のスレッド)コンテキストにあります。スレッド3によって主コンテキストに加えられた変更。

スレッド5コンテキストにそのレコードを挿入すると、参照整合性と関係制約に違反します。この状況では、レコードをメインスレッドのコンテキストに直接挿入することしかできません。

関連する問題