2011-08-23 80 views
0

我創建了一個名爲TItem的NSManagedObject。那個對象,我添加了一個幫手實例方法如下所示:創建將對象傳遞給實例方法的NSPredicate

- (BOOL) isItemForUser:(TUser *)user; 

isItemForUser各種屬性的TUSER對象本身進行比較,根據比較結果返回一個BOOL。

我想創建一個謂詞,它將能夠將TUser對象傳遞給該方法,以便我可以找到所有TItem對象,該對象在傳遞給定對象時將返回YES。從本質上說,我想要做的東西像下面這樣:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"isItemForUser:%@ == YES",self.user]; 

上述語法顯然是不正確的,但是我正在尋找在同一個精神的東西。有任何想法嗎?

謝謝!

回答

0

我會探討做什麼比較在你的isItemForUser方法在謂詞代替。也許簡化你的數據模型,使比較更容易?例如,添加一些映射到用戶的新屬性,並在對象創建時進行計算。這樣,比較非常簡單。

+0

這是一個有趣的想法。它確實破壞了我正在尋找的一些封裝。此方法將用戶的性別和年齡與自己的屬性進行比較。 (它基本上回答了這個問題:「這個TItem是否適合30歲以上的男性?」)因此,我希望TItem自己使用這種方法來確定。如果我要理解你,你建議只公開TItem的'forGender'和'forAge'屬性,然後構建一個複合謂詞,該複合謂詞創建'isItemForUser'當前正在評估的相同邏輯表達式?感謝您的建議! – DeepFriedTwinkie

0

FUNCTION是你在找什麼:

[NSPredicate predicateWithFormat:@"FUNCTION(SELF, 'isItemForUser:', %@) == YES", self.user] 

有兩點需要注意,但是:

  1. isItemForUser:必須返回一個NSNumber,而不是一個BOOL
  2. 我99.9999%肯定這不會作爲提取請求的謂詞的一部分工作
相關問題