0

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

我有一个名为 User 的域模型和一个名为 Message 的域模型。我已对其进行设置,以便用户与消息具有多对多关系。所以在我的应用程序中,当我这样做时

[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 回答