【发布时间】:2011-08-20 19:08:37
【问题描述】:
我正在开发一个 iphone 应用程序,并且我使用 Group 和 Contact 对象建立了一个简单的多对多关系。一个组可以有多个联系人,联系人可以属于多个组。
我正在尝试使用以下谓词选择特定联系人尚不属于的所有组。 (注:uid字段是一个字符串字段,我用来唯一标识联系人实体)
[NSPredicate predicateWithFormat:@"ALL contacts.uid != %@", contactUId]
根据 Apple 的谓词编程指南,ALL 聚合操作是有效的,但我收到以下异常,表明这是一个不受支持的谓词:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
我可以使用类似的谓词来选择联系人已经属于使用此谓词的所有组,因此看起来我已正确定义了所有关系和字段。
[NSPredicate predicateWithFormat:@"ANY contacts.uid == %@", contactUId]
构造谓词时引发异常,而不是在我尝试实际执行获取请求时引发异常,因此它似乎与我正在使用的语法有关,而不是与 Core Data 支持有关。我做错了什么?
【问题讨论】:
-
安布罗斯,欢迎来到 SO。您能否在谓词的定义周围包含更多代码?
-
我不确定还包括什么。异常在 predicateWithFormat: 调用中引发(而不是在执行 fetch 期间),因此很明显问题与谓词有关,而不是 fetch。
-
我在一个测试/示例应用程序中重新创建了该场景,并且在对 [NSManagedObjectContext executeFetchRequest:error:] 方法调用的调用中引发了异常,而不是在我最初的 [NSPredicate predicateWithFormat:] 调用中指示。
-
大家找到解决方案了吗?我遇到了同样的问题:
(ALL records.checked == 1)records is a too many relationship on the entity I'm query and check is an NSNumber
标签: iphone ios core-data nspredicate predicate