NSManagedObject中的自定义查询方法

时间:2012-04-12 01:06:52

标签: ios iphone core-data nsmanagedobject

有没有办法在NSManagedObject的子类中添加自定义查询方法?

我有一个名为User的域模型,以及一个名为Message的域模型。我已将其设置为使用户与消息具有To-Many关系。所以在我的应用程序中,当我做

[userInstance messages];

它返回一个属于该用户的NSSet消息,这是完美的。但Message域模型还有一个“active”字段,它是一个布尔值。

我想在域模型上创建一个新方法

- (NSSet *)activeMessages
显然,

是一种只返回active = true的消息的方法。我知道我能做到

[userInstance messages];

然后只是循环并删除所有active = false,但这似乎有点低效。看起来像是浪费取得所有,然后过滤。我宁愿在查询中过滤掉它。

我能想到的另一种方法是以某种方式获取域模型中的NSManagedObjectContext来手动执行查询。

这是最好的方法吗?或者我还能做些什么吗?

1 个答案:

答案 0 :(得分: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;

}