0

私はPostオブジェクトを持っているアプリで作業しています。各投稿には多くのエンティティ(メンション、ハッシュタグ、リンク)を含めることができ、各エンティティには1つの投稿があります。エンティティのメインクラスが1つあり、次にサブクラスが3つあります。

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

継承があるため、同じ属性を 2 回コーディングする必要はありません。それ以外の場合、親オブジェクトを持つ管理対象オブジェクトは、他の管理対象オブジェクトと同じです。

したがって、投稿に 3 つの関係を与える必要があります。

Post
 hashes   Hash        
 mentions Mention     
 links    Link        

次に、問題は簡単になります。

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

userIDlikeはおそらく一意であるため意味がなくLIKE、単純な同等性よりもはるかにコストがかかります。


エンティティの 1 つのクラスに対して 1 対多の関係のみが必要な場合は、 に別の属性を含める必要がありますEntity。たとえば、NSNumberそのタイプを示すために です。enum数値型を読みやすくするためにan を使用すると仮定すると、述語は次のようになります。

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