2013-05-03 39 views
3

我有一個塊謂詞,我精心製作,僅發現您無法在Core Data中使用它們。在謂詞中評估CoreData實體類型

NSPredicate *rootContactPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 

     BOOL isPersonAndRoot = ([[[evaluatedObject entity] name] isEqualToString:@"Person"] && [[(Person*)evaluatedObject accounts] count] == 0); 
     BOOL isAccountAndRoot = ([[[evaluatedObject entity] name] isEqualToString:@"Account"] && [(Account*)evaluatedObject root] == nil); 

     return isPersonAndRoot || isAccountAndRoot; 
    }]; 

所以我需要將其轉換爲標準的字符串格式謂詞,但我不清楚如何檢查評估對象的實體類型。 PersonAccount實體是Contact實體的子類,它是在提取請求中評估的類型。我希望它會看到子類型。

回答

3

你不能。原因是謂詞將需要被轉換,以便它可以在底層數據存儲上運行(推測是SQLite)。 SQLite數據庫沒有關於元素類型的任何數據,它只知道對象的鍵和值。

根據您要做的事情,您需要針對超級實體中已知的密鑰運行單個獲取請求。或者你需要有2個獲取請求,分別執行,然後組合2個結果集。

+0

我希望entity.name可以解決某些事情......它沒有。 – 2013-05-03 15:48:23

+0

這是模型中保存的數據(與應用程序一起編譯)與SQLite文件中保存的數據之間的區別...... – Wain 2013-05-03 15:49:08