我有一张表:
POI(=兴趣点) - > belongsToCategory - > POICategory
现在我基本上想要一个查询: "给我所有属于x,y,z ......类别的POI。" 我查询的类别数当然可以是任何东西。所以我的问题是:
答案 0 :(得分:1)
我认为POI
是一个实体,其关系名为belongsToCategory
,其中POICategory
为其目标实体。你不会说这种关系是一对一还是多对(谓语在每种情况下略有不同)。如果你有一个数组requiredCategories
包含你感兴趣的POICategory
个对象(x,y,z等),那么你可以在谓词中使用IN
运算符,就像这样:
对于一对一:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"POI"];
fetch.predicate = [NSPredicate predicateWithFormat:@"belongsToCategory IN %@",requiredCategories];
NSError *error = nil;
[context executeFetchRequest:fetch error:&error];
... etc
对于多人来说:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"POI"];
fetch.predicate = [NSPredicate predicateWithFormat:@"ANY belongsToCategory IN %@",requiredCategories];
NSError *error = nil;
[context executeFetchRequest:fetch error:&error];
... etc
IN
运算符避免了必须为每个类别的单独谓词构建复合谓词。
关于在NSUserDefaults
中存储查询,我想你想要保留所需类别(x,y,z等)的详细信息,以便随后可以重建查询。它可以做到,但我的建议是:不要。在NSManagedObjects
中保留NSUserDefaults
的详细信息是圆孔中的方形挂钩。最好设计CoreData实体,以便跟踪选择的类别(例如,向selected
添加POICategory
属性)。
答案 1 :(得分:0)
我认为最好在POICategory表中使用您需要的所有类别的谓词进行查询,然后阅读POI集,只需访问poiCategory.poiArray
我还建议在NSPredicate上创建一个类别来构造你需要的谓词。如果需要更改,保存在userdefaults中会强制您保留它