我正在开发一个我有Post对象的应用程序,每个帖子可以有很多实体(提及,主题标签和链接),每个实体都有一个帖子。我有一个Entity主类,然后我有三个子类。
Mention : Entity
我的提及类具有以下属性:
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * userId;
我现在想创建一个NSPredicate
,找到所有提及某个用户和userId
的帖子,我不知道该怎么做。
我尝试过这样的事情:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY mentions.userId like %@", [Session currentUser].userId];
// That doesn't work since Post(s) have many entities and not Mention(s).
// I have also tried something like this:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY entities.mentions.userId like %@", [Session currentUser].userId];
// And that didn't work either.
关于我最好的方法的任何想法应该找到所有提及特定userId的特定用户的帖子?
答案 0 :(得分:1)
继承是存在的,因此您不必两次编写相等的属性。否则,具有父对象的托管对象就像其他托管对象一样。
因此,您应该为您的帖子提供三种关系:
Post
hashes Hash
mentions Mention
links Link
然后你的问题就变得微不足道了:
[NSPredicate predicateWithFormat:@"ANY hashes.userID = %@", _currentUser.userID];
就像没有意义一样,因为userID
可能是唯一的,LIKE
比简单等价贵得多。
如果您只想与一类实体建立一对多关系,则必须在Entity
中添加另一个属性,例如NSNumber
,表示它的类型。假设您使用enum
来使数字类型更具可读性,那么谓词将如下所示:
[NSPredicate predicateWithFormat:
@"ANY (entity.type == %@ && entity.userID == %@)",
@(EntityTypeMention), _currentUser.userID];