0

でフォルトではありません。私は、オブジェクトが削除されており、現在CoreDataは、いくつかのコンテキストでプロパティにアクセスしようとしているし、それを障害することができないからだと想定しています。私はsetRelationshipKeyPathsForPrefetchingを呼び出し、それを私がプリフェッチしているしたいの関係を渡そうとしましたこれを解決するには。CoreDataプリフェッチは、私はCoreDataは、オブジェクト上の障害を満たすことができない問題を抱えてきた性質

例:私はエンティティAを持っていますが、エンティティBとは多対多の関係にありますが、ある時点ではエンティティBのプロパティにアクセスしている間にエンティティBは別のコンテキストで削除されます実現されない。

[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"listOfBs", nil]]; 

私はこれをしなかった場合、私は無事にそのプロパティを呼び出すことができますが、これはケースのように思われないように、それはエンティティBをプリフェッチだろうと思いました。

編集:私はこれについての情報を見つけるように見えることはできませんが、それはかなり一般的な問題でなければなりません。あるコンテキストに別のコンテキストで削除された管理対象オブジェクトがある場合、クラッシュするのではなくオブジェクトが存在しなくなったことを安全に把握する方法が必要です。

EDIT 2:CoreDataが正しくプリフェッチ要求。私はまだであっても、私はエラーを持っていない場合に障害が発生しなければならない返されるオブジェクトよりsetRelationshipKeyPathsForPrefetchingを呼び出す場合、私は単純に返されますオブジェクトをプリントアウトし、彼らが故障していることがわかります。 CoreDataは多対多関係でオブジェクトをプリフェッチしませんか?

EDIT 3:関係自体はプリフェッチされていますが、プリフェッチされた項目のプロパティはフォールトインしません。したがって、エンティティAがあり、Aに関連付けられたBをすべてプリフェッチしたい場合は、setRelationshipKeyPathsForPrefetching Bさんのすべてのプロパティに障害が発生していません。

+0

これが発生したときのコンテキストを記述できますか。 NSManagedContextは1つしかなく、常に同じスレッドに入っていますか? –

+0

私は複数のスレッド/コンテキストを持っています。さらに私はDBに触れる複数のプロセスを持っています。私がもう存在しないものを見ることができるシナリオは間違いありません。 – JPC

+0

私はCoreDataを複数のスレッドで使用するのではなく、複数のスレッドで変更を加えることをお勧めしませんでした。最新のリリースではAppelが複数のスレッドを扱うのが簡単になるようにいくつかの修正を加えたことを知っていますので、Appel開発者のWebサイトでTech Talkが述べていることを推測してください。 –

答えて

0

は解決策を考え出しました。コアデータはデータベースからのアトミックフェッチを許可しないため、関係をプリフェッチした後にコアデータがエラーをスローします。関係を先読みするだけで、関係がプリフェッチされます。しかし、データではありません。解決策はtry/catchを使用して例外でオブジェクトを更新することでした。

関連する問題