相关疑难解决方法(0)

如何在使用Core Data时正确设置NSPredicate以实现多对多关系?

我有一个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或者用整数替换,我仍然面临同样的问题和不正确的行为.

在这种情况下实现谓词的正确方法是什么?在使用核心数据时,这可能是与任何聚合运算符相关的错误吗?提前谢谢你,这让我发疯了.

iphone core-data

22
推荐指数
1
解决办法
2万
查看次数

核心数据:对多对多关系的谓词

我有一个包含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'

iphone core-data objective-c

6
推荐指数
1
解决办法
8067
查看次数

标签 统计

core-data ×2

iphone ×2

objective-c ×1