核心数据:如何计算具有特定属性值的一对多关系中的实体?

Mar*_*ark 3 cocoa core-data objective-c

这是我的数据模型的一个例子:

  • 有邮箱
  • 每个邮箱都有许多邮件
  • 每条消息都有一个标志,指示它是否未读

如何计算特定邮箱的未读邮件数?

我尝试在数据模型编辑器中创建一个获取请求,但我无法为邮箱添加条件,尽管邮件实体具有为其拥有邮箱定义的关系.

我知道在处理Core Data时我不应该在SQL中思考,但是感觉很自然,所以说:

SELECT count(*) FROM Messages WHERE unread = 1 AND mailboxId = 12345
Run Code Online (Sandbox Code Playgroud)

除了循环特定邮箱的每条消息之外,还有其他方法可以获取未读消息吗?

ban*_*isa 5

您想要在不获取对象的情况下进行计数,因为这需要更长的时间:

- (NSUInteger)countForFetchRequest:(NSFetchRequest *)request error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

返回给定的获取请求如果已传递给executeFetchRequest则返回的对象数:错误:

您还需要为获取请求(即WHERE子句)添加谓词.

例如

NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName:@"Messages" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat: @"(unread == 1 && mailboxId == %i)", mailboxId]];
Run Code Online (Sandbox Code Playgroud)

(我可能有我的谓词语法错误......但你应该明白这个想法)