バックグラウンド
2 つのストア (データ用の 1 つのリポジトリとユーザー データ用の 1 つのストア) で構成されたコア データ データベースがあり、フェッチされたプロパティによってそれらの間がリンクされています。
それらの間の関係が 0 対 1 であるような 2 つのエンティティがあるとします。 カード 0 ----> 1 CardStatus
1) Card、参照データといくつかのプロパティ (externalKey、word、description など) を含む
Fetch Properties - userData (CardStatus を指し、externalKey を使用して 2 つのエンティティ間のリンクを行います)
2)各カードのステータスを含むCardStatus 。このエンティティは、ユーザー データ ストアに格納されます。
カードのステータスに基づいてカードをフェッチする必要がある場合があります (例: 期限切れのマークが付いているすべてのカードを取得する、新しいマークが付いているすべてのカードを取得するなど...)。
質問
CardStatus エンティティの値に基づいて Card エンティティを取得するには、どのような述語を記述すればよいですか?
取得したプロパティ userData を述語で直接使用しようとしましたが、コア データでは許可されていません。
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'keypath userData がエンティティに見つかりません'
次に、サブクエリを試しました (以下を参照) - それでも機能しません。興味深いことに、(フェッチ要求ではなく) NSArray で直接フィルターを実行すると、正常に動作します。
例 - 特定のステータスのカードを取得する:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(userData, $x, ($x.currentLevel == 0)).@count > 0)"];
例 - 新規としてマークされたカードを取得する (つまり、CardStatus にデータがない):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $x, $x.userData.@count == 0).@count > 0"];
なにか提案を?