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".
我有两个名为“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".