私はシングルトンに(managedObjectとして)プロパティを持っています。このオブジェクトのプロパティは更新され(削除され、カスタムIDを持つ新しいオブジェクトが作成され、古いオブジェクトのIDと等しくなります)、次にコンテキストを保存し、プロパティを無効にして新しいオブジェクトを取得し、プロパティに割り当てます。CoreData。無効なオブジェクトを正常に保存しました
私はエラーはありませんでしたが、すべて正常でした。アプリケーションを再起動した後、私は「CoreDataは障害を達成できませんでした」という例外を得ました。私はsqliteBrowserでデータベースを開き、そこに古いオブジェクトと新しいオブジェクトを見ました。新しいオブジェクトが正しいです。古いオブジェクト(削除されるべきもの)は、削除されたオブジェクトとの関係を持ちます。
また、異なるスレッドがオブジェクトを更新するときに、UIはmanagedObjectのプロパティにアクセスできます。
どのように発生する可能性がありますか?そしてこれを防ぐ方法は?私は "CoreDataがフォールトを満たすことができませんでした"というcoreDataのトラブルシューティングを読んでいます。私は例から私の問題を発見しなかった。
私はこれについて非常に混乱しました。私はアイデアを持っていますが、それは良い方法ではありません: プロパティをmanagedObjectではなくid(カスタムID、NSNumber)、owerload setterおよびgetterとするとどうでしょうか。 Setterは同じオブジェクトを受け取りますが、カスタムIDにアクセスしてプロパティのIDを割り当てます。 Getter - idでオブジェクトをフェッチし、プロパティに保存します。 GetterとSetterはNSLockを開始時にロックし、最後にNSLockをロック解除します。オブジェクトを更新するスレッドは、更新と保存が終了するまでロックをロックします。 大きな感謝!
P.S. 私は大変申し訳ありませんが、私は通常、深刻な理由で自分のコードを表示することはできません。
しかし、私は本当にコンテキストでオブジェクトを削除し、すべての削除ルールをチェックし、すべてのルールが "カスケード"または "無効化"に割り当てられていることを確信しました。 – Arsynth
削除後にコンテキストを保存しましたか?ストアは、コンテキストを保存するまで変更されません。 – TechZen
はい、私はしました。そして、古いオブジェクト、削除されたグラフとの関係は、まだ生きている間違いで店に残っています。すべての時間ではなく、まれに同じユーザーの操作で発生します – Arsynth