Core Data使用派生类的谓词获取基类的数据

时间:2014-01-08 19:48:53

标签: ios iphone objective-c core-data nspredicate

简而言之>>仅列出所喜爱网站的所有国家/地区的列表。

Problem diagram

我想要在网站上拥有“isFav = YES”的所有国家/地区的列表。我可以使用谓词查询来帮助吗?

2 个答案:

答案 0 :(得分:1)

@James Richard的回答是正确的。但是,你需要比谓词更进一步。

谓词将返回国家/地区对象。然后,您需要添加一个方便的方法(或者只是在每次想要答案时编写过滤器)来过滤网站。

例如,在Country实体子类中,您可以使用此方法:

- (NSSet*)favoriteWebsites
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFav == YES"];
    NSSet *websites = [self valueForKey:@"websites"];
    NSSet *favorites = [websites filteredSetUsingPredicate:predicate];
    return favorites;
}
顺便说一句,你应该始终在核心数据中建立双向关系。损坏数据的风险很好。同样,核心数据命名约定不是将单词is添加到属性之前。该属性应该只是favorite,然后可以使用isFavorite配置getter访问器。

答案 1 :(得分:0)

是的,你可以。

你必须做的谓词是:

[NSPredicate predicateWithFormat:@"ANY websites.isFav == YES"]

本文档可能有助于其他谓词格式化:

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Predicates/Articles/pUsing.html#//apple_ref/doc/uid/TP40001794-SW3