2012-04-28 5 views
0

私は、 "responsibleUsers"という名前のIDタイプの列を持つエンティティを持っています。この列には、NSNumbersを含む配列が格納されています。 現在のユーザーと一致するこのエンティティのすべてのオブジェクトを取得したいとします。したがって、私は次の述語を作成します:CoreData内のNSArrayでNSNumberを取得する正しい方法は何ですか?

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

私が試してみて、私のアプリケーションはクラッシュします。 EXC_BAD_ACESSを使用して1回、「述語nsnumberの実装されていないSQL生成」を1回使用

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

答えて

1

あなたがしようとしているクエリは、2つのエンティティ持っていることを前提とします。エンティティあなたが照会(のはGroupそれを呼びましょう)とresponsibleUsers呼ばGroupから対多の関係として設定されている、おそらくUserと呼ばれる別のものを、、。

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

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

設定では、NSNumberの配列がのプロパティーの関係ではなく、設定されているようです。したがって、そのようなクエリは使用できません。配列を取得して配列に問い合わせるだけで済みます。

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

実際にユーザーグループのようなものを照会する場合は、最初の方法をお勧めします。あなたが何らかの種類のユーザーを照会している場合は、BOOLプロパティresponsibleを最も効率的な方法として提案します。

+0

ありがとうございます - はい、あなたは絶対に正しいです。 CoreData内にNSArrayを格納する - 変形可能なプロパティは、コアデータの性質に反します。私はモデルとコードを通常の関係モードに変更し、すべてが動作する...ありがとう。 –

関連する問題