有没有办法在NSManagedObject的子类中添加自定义查询方法?
我有一个名为User的域模型,以及一个名为Message的域模型。我已将其设置为使用户与消息具有To-Many关系。所以在我的应用程序中,当我做
时[userInstance messages];
它返回一个属于该用户的NSSet消息,这是完美的。但Message域模型还有一个“active”字段,它是一个布尔值。
我想在域模型上创建一个新方法
- (NSSet *)activeMessages
显然,是一种只返回active = true的消息的方法。我知道我能做到
[userInstance messages];
然后只是循环并删除所有active = false,但这似乎有点低效。看起来像是浪费取得所有,然后过滤。我宁愿在查询中过滤掉它。
我能想到的另一种方法是以某种方式获取域模型中的NSManagedObjectContext来手动执行查询。
这是最好的方法吗?或者我还能做些什么吗?
答案 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;
}