我有一个Core Data模型,其中Task实体包含ExcludedDay实体的可选多对多关系ExcludedDays.ExcludedDay的一个属性是day,它是一个NSDate对象.ExcludedDay实体与Task实体具有反向强制关系.
为了获取指定日期的任务,我需要确保指定的日期不会显示为任何ExludedDay实体的day属性.
我开始尝试了
NSPredicate *dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"ALL excludedDays.day != %@", today];
Run Code Online (Sandbox Code Playgroud)
但是,尽管文档说的是,ALL不起作用,应用程序抛出异常:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'不支持的谓词.
在此论坛中发布相同的问题后,我能够在各种人的帮助下设计以下谓词:
NSPredicate * dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"excludedDays.@count == 0 || (excludedDays.@count > 0 && NONE excludedDays.day == %@))", today];
Run Code Online (Sandbox Code Playgroud)
虽然这首先起作用,但我刚刚发现,只有当ExcludedDay实体仅包含一天时,这才有效.一旦ExcludedDay实体包含同一任务的一天以上,该谓词就会停止工作.因此,即使当天在ExcludedDay实体中显示为一天,也会选择一天的任务,这当然是错误的.问题与作为NSDate对象的属性日无关:用相应的NSString替换day或者用整数替换,我仍然面临同样的问题和不正确的行为.
在这种情况下实现谓词的正确方法是什么?在使用核心数据时,这可能是与任何聚合运算符相关的错误吗?提前谢谢你,这让我发疯了.
我有一个包含4个实体的CoreData模型.
模特截图 - > http://img96.imageshack.us/img96/7857/screenshot20100209at182.png
州
-StateName
地点:
-locationName(属性)
-locationDescription
-locationActivities(relatinship)
- 状态(关系)
LocationActivities:
- 位置(关系)
- 活动(关系)
活动
-activityName(属性)
-locationsActivities(关系)
如何编写一个选择所有具有的位置的查询
(activity ='Golf'OR activity ='Swimming')AND state ='LA'