0

「responsibleUsers」という名前のタイプIDの列を持つエンティティがあります。この列には、NSNumbersを含む配列を格納します。現在のユーザーに一致する、このエンティティのすべてのオブジェクトをフェッチしたいと思います。したがって、次の述語を作成します。

    [NSPredicate predicateWithFormat: @"%@ IN responsibleUsers",[NSNumber numberWithInteger: curUser.oID.integerValue] ]

何をしようとしても、アプリがクラッシュします。EXC_BAD_ACESSを使用した場合、「述語nsnumberの未実装SQL生成」を使用した場合

私のエンティティを照会する正しい方法は何ですか?

4

1 に答える 1

1

試行しているクエリは、2つのエンティティがあることを前提としています。クエリしているエンティティ(これを呼び出します)と、呼び出されたからの多対数の関係として設定されている、おそらくと呼ばGroupれる別のエンティティです。そうすれば、提案した述語を使用できるようになります。UserGroupresponsibleUsers

[NSPredicate predicateWithFormat:@"%@ IN responsibleUsers, aUser]; 

これは、CoreDataオブジェクトグラフの推奨される使用法です。

セットアップでは、関係ではなくプロパティNSNumberとしてセットの配列があるようです。したがって、そのようなクエリを使用することはできません。配列を取得して配列をクエリするだけです。

BOOL containsResponsibleUser = NO;
for (NSNumber *n in aGroup.responsibleUsers) {
    if ([n isEqualTo:[NSNumber numberWithInteger: curUser.oID.integerValue]]) 
       containsResponsibleUser = YES;
}

実際にユーザーのグループのようなものをクエリしている場合は、最初のアプローチをお勧めします。ある種のユーザーにクエリを実行する場合は、最も効率的なソリューションとしてBOOLプロパティをお勧めします。responsible

于 2012-04-28T16:52:29.897 に答える