述語を使用して、検索したいデータがあるデータを取得しようとしていますNSSet
@property (nonatomic, retain) NSSet *categories;
@property (nonatomic, retain) NSString *otherDetails;
@property (nonatomic, retain) NSNumber *id;
NSSet
カテゴリは別のエンティティから構成され、次のものが含まれます。
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *id;
次に、述語を介してこれを取得してみてください
NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@categories in %@", catList];
catList は次のとおりです。
NSmutableArray *catList = [[NSMutableArray alloc] init];
データが取り込まれます
これにより、次のエラーが表示されます
'NSInvalidArgumetException', reason: 'unimplemented SQL generation for predicate: (categories IN {"this", "that"});
NSSet
このようなフィールドを使用するように変更してみました
fetcher.predicate = [NSPredicate predicateWithFormat:@categories.name in %@", catList];
しかし、これはうまくいきませんでした。
述語を使用するように変更するNSString
とエラーにはなりませんが、データが異なるため結果は返されません。
fetcher.predicate = [NSPredicate predicateWithFormat:@categories in %@", catList];
では、述語を使用してクエリを実行するにはどうすればよいNSSet
ですか?
更新:それ以来、このHow to check if an objects is inside a NSSet of objects by using predicateWithFormat in CoreData? を見つけました。それはおそらく投稿された質問を解決するでしょうが、私はこれを少し単純化しすぎました。
私が実際に持っているのは、私が検索している詳細の山全体を持つ別のエンティティであり、それは私の「MyEntity」エンティティと多対1の関係にあります。
MySearchEntity:
@property (nonatomic, retain) NSNumber *searchField1;
@property (nonatomic, retain) NSNumber *searchField2;
@property (nonatomic, retain) MyEntity *myEntity;
@property (nonatomic, retain) NSNumber *id;
そして、このようなフェッチリクエスト
NSFetchRequest *fetcher =[NSFetchRequest fetchRequestWithEntityName:@"MySearchEntity"];
fetcher.predicate = [NSPredicate predicateWithFormat:@"myEntity.otherDetails CONTAINS %@ && searchField1 <= %f && searchField2 >= %f && myEntity.categories.name in %@", catList];
ステートメントの残りの部分は機能しますが、カテゴリとの多対多の関係で MyEntities によってフィルター処理することはまだできません。