2011-09-26 57 views
1

我需要使用具有圓函數的NSPredicate。 例如:帶圓函數的NSpredicate

Child* child1 = [self myFirstChild]; 
NSPredicate *predicate = [NSPredicate predicateWithString:@"round(SELF.age) > 12"]; 
BOOL twelveOrAlmostTwelve = [predicate evaluateWithObject:child1]; 

沒有在文檔中沒有這樣的功能: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Predicates.pdf

任何想法? 謝謝

+0

有沒有'輪()'函數,但有*有*'地板()'和'小區()'功能。內建函數列表位於['NSExpression'文檔](http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSExpression_Class/Reference/NSExpression.html#//apple_ref/DOC/UID/TP30001190-CJBDJCJE)。 –

回答

1

您不能生成任意的謂詞函數。然而,在這種情況下,答案是微不足道的:

NSPredicate *predicate = [NSPredicate predicateWithString:@"SELF.age >= 11.5"]; 
+0

好吧,現實生活不那麼簡單,這個例子太微不足道了。也許有一種方法可以使用現有的功能(例如ceiling,abs)來創建圓形功能? – Maciek

+0

也許,但大多數情況下,你會想要計算出正確的值進行比較,並將其作爲參數插入到謂詞中。我無法想象將輸入四捨五入比計算正確的比較器更好的情況。除非你也使用其他功能,如@median等。請記住,與直接執行數學運算相比,謂詞非常緩慢,除非您使用Core Data進行大量提取。 –

+0

感謝Rob,我有一個相當複雜的驗證引擎,其謂詞是根據來自Web服務的定義構建的。這些謂詞必然與例如文本字段並在需要驗證時進行評估。這確實很慢,但對於用戶體驗仍然可以接受。任意謂詞函數本來就是我所需要的。如果我知道如何做到這一點,我會發布,謝謝 – Maciek