3

我一直在搜索 Apple 的 Predicate Programming Guide 和 SO,试图确定为某个获取请求编写谓词的正确方法。

似乎我尝试使用点符号来遍历关系的方式没有得到请求的尊重。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:context];

[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"project.user == %@", self.user];

[fetchRequest setPredicate:predicate];

用户、项目和任务都是映射到 BaaS 提供商 (StackMob) 的核心数据实体。

关系如下:用户 一对多 Project 一对多 Task与您期望的反向关系。我想要做的是获取当前登录用户的所有任务。所以,我的想法是:发送带有实体“任务”的获取请求。如果拥有该任务的项目归登录用户所有,则获取该任务并显示它。很简单。

而且我认为我应该能够在上面显示的谓词中使用点表示法,但是获取请求返回 nil。

关于获取请求的其他一切都很好。如果我将格式字符串更改为@"project != NULL",我会恢复所有任务。

我只是错误地写了我的格式字符串吗?向 StackMob 发送获取请求时,点表示法是否无效?

与往常一样,非常感谢任何帮助。

如果需要更多信息,请告诉我。我现在离这个有点太近了,看不清楚。

4

1 回答 1

6

StackMob 不支持获取关系的属性(project.user == X 的任务)。但是,您似乎正在尝试为登录用户获取给定项目的所有任务。如果我假设登录用户是创建项目和任务的用户是正确的,那么将项目架构的权限设置为“允许 sm_owner”。然后,您可以根据项目 ID 获取任务(项目 IN 1234 的任务),或基于 ID 的项目并获取所有任务(项目 ID == 1234 并使用任务关系的值)。无论哪种方式,使用该权限提取只会返回 sm_owner == 登录用户的结果,因此您无需设置提取以使其使用用户 ID 作为过滤器。希望有帮助!

于 2013-04-19T20:08:31.450 回答