Task エンティティにオプションの多対多のリレーションシップ excludeOccurrences が含まれる Core Data モデルがあります。excludeOccurrences のプロパティの 1 つは start で、これは NSDate オブジェクトです。ExcludedOccurrence エンティティには、Task エンティティと逆の必須の対 1 関係があります。
指定した日のタスクを取得するには、指定した日が ExcludedOccurrence エンティティの開始プロパティとして表示されないようにする必要があります。したがって、私が使用しようとしているサブ述語の1つは
NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"(ALL excludedOccurrences.start != %@))", today];
ここで、today は、日、月、年のコンポーネントのみを含む今日の NSDate オブジェクトです。除外されたすべての開始プロパティには、日、月、および年のコンポーネントのみが含まれます。
これで問題ないはずですが、少なくとも Core Data と NSPredicate のドキュメントを読むと、次のエラー メッセージが表示されます。
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'サポートされていない述語
同等の述語を使用する場合
NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"!(ANY excludedOccurrences.start == %@))", today];
例外はスローされませんが、コードは期待どおりに機能しません。除外すべきではない今日のオカレンスが除外されます。
また、excludedOccurrences == nil の場合をテストする方法もわかりません: 次の述語
NSPredicate *nilPredicate = [NSPredicate predicateWithFormat: @"(excludedOccurrences == nil)"];
実行時に例外を引き起こす
対多キーはここでは許可されていません
ただし、excludedOccurrences 関係はオプションであるため、nil かどうかもテストする必要があります。
どうすればこれに対処できますか? 前もって感謝します。