我有一个名为Attachment的实体,它有一个多对多的关系,没有反向关系。
我正在尝试找到downloaded
属性为NO
关系名称为attachments
的所有附件实体,并且我编写了以下谓词来执行此操作。
[NSPredicate predicateWithFormat:@"ALL attachments.downloaded == NO"]
导致*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
这只发生在SQLite商店,如果我将商店更改为二进制,它似乎工作正常。我更喜欢坚持使用SQLite商店。
有什么想法吗?无论如何不同地编写谓词以达到相同的期望结果?
答案 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的谓词