0

我正在开发一个有 Post 对象的应用程序,每个 Post 可以有许多实体(提及、主题标签和链接),每个实体都有一个 Post。我有一个实体的主类,然后我有三个子类。

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 的特定用户的帖子的任何想法?

4

1 回答 1

1

继承是存在的,因此您不必对相等的属性进行两次编码。否则,具有父对象的托管对象就像其他托管对象一样。

因此,你应该给你的帖子三个关系:

Post
 hashes   Hash        
 mentions Mention     
 links    Link        

那么你的问题就变得微不足道了:

[NSPredicate predicateWithFormat:@"ANY hashes.userID = %@", _currentUser.userID];

like 没有意义,asuserID可能是唯一的,并且LIKE比简单的等价要昂贵得多。


如果您只想要与一类实体的一对多关系,则必须在 中包含另一个属性Entity,例如 an NSNumber,以指示它是什么类型。enum假设您使用 an使数字类型更具可读性,谓词将如下所示:

[NSPredicate predicateWithFormat:
       @"ANY (entity.type == %@ && entity.userID == %@)",
       @(EntityTypeMention), _currentUser.userID];       
于 2013-01-27T22:14:16.960 回答