NSPredicate:无法解析关系的格式字符串

NSPredicate: Unable to parse the format string for relationship

我有两个名为“CIUser”和“CICast”的实体。 “CIUser”实体与名为“cast”的“CICast”实体具有一对一关系。

CIUser : 
    -> userId(Int)
    -> isLive(bool)
    -> name(String)

CICast:
    -> castId(Int)
    -> lastUpdate(Date)

现在我的要求是获取所有当前在线且 lastUpdate 小于计算日期的用户。所以我准备了像

这样的获取请求
let time = //an calculated NSDate object

let fetchRequest = NSFetchRequest(entityName: "CIUser")
fetchRequest.predicate = NSPredicate(format: "isLive == %@ AND cast.lastUpdate <= %@", NSNumber(bool: true), time)

但它使应用程序崩溃 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "isLive == %@ AND cast.lastUpdate <= %@"'

任何人都可以帮助我哪里做错了,或者我应该采取什么方法。建议将不胜感激。

问题是 "CAST" 是谓词格式中的 保留字 语法,保留字不区分大小写。所以这个冲突 与名为 "cast".

的关系

作为解决方法,使用 %K 键路径替换:

fetchRequest.predicate = NSPredicate(format: "isLive == %@ AND %K <= %@",
                            NSNumber(bool: true), "cast.lastUpdate", time)

或重命名关系。您可能想使用 %K 扩展 一般是为了避免这样的问题:

fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K <= %@",
                           "isLive", NSNumber(bool: true),
                           "cast.lastUpdate", time)

有关详细信息,请参阅 Predicate Format String Syntax 在 "Predicate Programming Guide".