NSPredicate ALL Aggregate与SQLite Store

时间:2011-05-18 10:38:50

标签: ios sqlite core-data nspredicate

我有一个名为Attachment的实体,它有一个多对多的关系,没有反向关系。

我正在尝试找到downloaded属性为NO关系名称为attachments的所有附件实体,并且我编写了以下谓词来执行此操作。

[NSPredicate predicateWithFormat:@"ALL attachments.downloaded == NO"]

导致*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'

这只发生在SQLite商店,如果我将商店更改为二进制,它似乎工作正常。我更喜欢坚持使用SQLite商店。

有什么想法吗?无论如何不同地编写谓词以达到相同的期望结果?

3 个答案:

答案 0 :(得分:2)

这可能已经过时了,但仍有人可能仍然觉得答案有用。

目前,使用SQLite作为后端存储的核心数据不支持ALL修饰符。就像它听起来一样,这就是为什么你可以用它来过滤内存中的数组,以达到预期的效果。

我认为这是由于其“难以”实施。至于SQLite,它在修饰符指定的条件语句上实现了一个除法运算。但是,NSPredicate并不限制您将其用作NSCompoundPredicate的一部分,从而增加了SQL生成器生成SQL语句的难度。

答案 1 :(得分:1)

你的架构描述有点不清楚,但我相信你只想用谓词执行附件实体的获取......

[NSPredicate predicateWithFormat:@"downloaded == NO"]

你试过吗?

我可能完全错了^ _ ^

答案 2 :(得分:0)

我好像现在找到了解决方法......

attachmentRequestResults = [self.managedObjectContext executeFetchRequest:attachmentIdRequest error:&error];
attachmentPredicate = [NSPredicate predicateWithFormat:@"ALL attachments.downloaded == NO"];
attachmentRequestResults = [attachmentRequestResults filteredArrayUsingPredicate:attachmentPredicate];

我删除了fetchrequest的谓词,以便它返回所有实体,然后在返回的数组上运行我的谓词

仍在寻找一种解决方案,我可以通过

执行针对Core Data的谓词