2011-05-18 87 views
1

我有一个名为附件的实体地方有没有反向关系的多对多关系。NSPredicate所有集合使用SQLite商店

我试图找到所有附件实体,其downloaded属性是NO关系名称是attachments,我写了下面的谓词来做到这一点。

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

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

这只是发生在一个SQLite店,如果我更改存储二进制它似乎很好地工作。我宁愿坚持使用SQLite商店。

任何想法?无论如何写不同的谓词,以达到相同的预期结果?

回答

0

我似乎发现周围的工作现在...

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

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

仍在寻找解决方案,我可以对核心数据执行谓词,尽管

1

您的模式描述有点不清楚,但我相信您只是想用附加谓词执行附件实体上的提取...

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

你试过了吗?

我可能是完全错误的在这里^ _^

+0

是的,这将工作,但我正在寻找一种方式来获取需要下载的附件列表,每个实体的基础上。因此,如果我有一个名为Document的实体具有附件,我想要一个方法,我可以将实体名称“Document”传递给并获取需要为该实体下载的附件列表。对于我的问题,我并不完全清楚,对不起。 – 2011-06-20 18:24:45

2

这可能是出来的时候,却依然有人可能仍然找到答案有用。

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

我想这是因为它的“困难”来实现。对于SQLite而言,它对由修饰符指定的条件语句执行分割操作。然而,NSPredicate不限制你使用它作为一个NSCompoundPredicate的一部分,从而增加了难度为SQL生成器生成的SQL语句。

+0

谢谢你这个非常有帮助的答案!你有没有关于如何使用子查询或其他方法构造'ALL'的想法? – AlexR 2012-10-20 14:14:10