2016-08-03 57 views
1

我有兩個實體名爲「CIUser」和「CICast」。 「CIUser」實體與名爲「cast」的「CICast」具有一對一關係。NSPredicate:無法解析關係的格式字符串

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 <= %@"'

誰能幫我哪裏做錯了,或者我應該採取什麼辦法。建議將不勝感激。

回答

3

問題在於「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 在「謂詞編程指南」。

+0

感謝@Martin,它的功能就像一個魅力。 –