0

NSManagedObjectのサブクラスにカスタムクエリメソッドを追加する方法はありますか?

UserというドメインモデルとMessageというドメインモデルがあります。ユーザーがメッセージに対してTo-Many関係を持つように設定しました。だから私のアプリでは、私がするとき

[userInstance messages];

そのユーザーに属するメッセージのNSSetが返されます。これは完璧です。ただし、メッセージドメインモデルには、ブール値である「アクティブ」フィールドもあります。

ドメインモデルに次のような新しいメソッドを作成したい

- (NSSet *)activeMessages

これは明らかに、active=trueのメッセージのみを返すメソッドです。私は私ができることを知っています

[userInstance messages];

次に、ループして、アクティブ= falseであるものをすべて削除しますが、それは少し非効率的です。すべてをフェッチしてからフィルタリングするのは無駄のようです。クエリで除外したいだけです。

私が考えることができる他の唯一の方法は、ドメインモデル内のNSManagedObjectContextを何らかの方法で取得して、手動でクエリを実行することです。

それが最善の方法ですか?または私ができる他の何かがありますか?

4

1 に答える 1

0

はい、次のようにNSFetchRequestを使用してみてください。

- (NSSet *)activeMessages inManagedContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    request.entity = [NSEntityDescription entityForName:@"Messages" inManagedObjectContext:context];
    request.predicate = [NSPredicate predicateWithFormat:@"user = %@ AND active = %@",self,YES];

    NSError *error = nil;
    NSArray *activeMessages = [context executeFetchRequest:request error:&error];

    return activeMessages;

}
于 2012-04-12T03:52:15.113 に答える