2017-01-04 46 views
2

我試圖創建一個NSPredicate爲一個提取的結果控制器,控制器應該只觀察有關係的對象(它不是零)以及關係的計數大於0的地方。keyPath爲關係屬性計數

我已經看到了如何使用字符串作謂語的參數做到這一點:

[NSPredicate predicateWithFormat:@"[email protected] == 0"]; 

來自:https://stackoverflow.com/a/1195519/4096655

但我想從文字字符串遠,所以我想使用關鍵路徑。

實施例:

import UIKit 
import CoreData 

class Animal: NSManagedObject { 

    @NSManaged var name: String 
    @NSManaged var friends: NSSet? 
} 

let keyPath = #keyPath(Animal.friends.count) 

導致錯誤: 歧義參照構件 '計數'

+1

我不知道是否有更好的解決方案,但'NSPredicate(格式:「 %K. @ count = 0「,#keyPath(Animal.friends))'可以工作。 –

+0

@MartinR它是一個更好的解決方案,如果屬性確實發生變化,會導致編譯時錯誤,謝謝! –

回答

3

#keyPath不知道關於@count運算符。但是你可以 使用它的「Animal.friends」關鍵路徑和謂語格式字符串追加@count

NSPredicate(format: "%[email protected] = 0", #keyPath(Animal.friends))