2013-02-13 59 views
1

我有一個對象的數組,其中兩個屬性X和Y(均爲NSString)。我要過濾的使用數組謂詞,使得所有的過濾的對象有X> Y。目前,我使用:如何使用NSPredicate過濾數組,使其中一個屬性的值大於其他值?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y"]; 

我在這行程序崩潰。寫這個謂詞的正確方法是什麼?

+2

您的謂詞字符串中有不平衡括號。這是一個錯字還是問題? – 2013-02-13 18:06:18

+0

NSString對象不具有「X值」。您使用的值應該是您要過濾的對象的屬性。 – 2013-02-13 18:06:52

+0

@RamyAlZuhouri,我想他是說他的自定義類的屬性X和Y是NSString類型的,而不是具有屬性的對象是NSString。 當你說X和Y是字符串時,你認爲X應該大於Y是什麼意思?他們是字符串表示的數字?你的意思是X按字母順序排列在Y之前?你的問題並不清楚。 – 2013-02-13 18:08:31

回答

2
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"X > Y"]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y)"]; 

應該可以正常工作,我想你錯過了一個)

查看Apple的文檔:Predicate Format String Syntax瞭解更多信息。

2

嘗試-[NSPredicate predicateWithBlock:]

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(MyClass *object, NSDictionary *bindings) { 
     return [object.x compare:object.y] == NSOrderedDescending; 
}]; 

這是假設你按字母順序要xy都是字符串。如果情況並非如此,請編輯您的問題以明確指出字符串x> y的含義。

+1

+1:我討厭謂詞格式,好像你在用另一種語言編程。 – 2013-02-13 18:26:17

1

這是你有什麼?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(X > Y)"]; 

因爲這是缺少「)」 和你有什麼比較? string.length> string.length?還是數字@「3」> @「5」?

這是你的Predicate programming guide

+1

我認爲這應該是一個評論。哦,看,大衛Ronnqvist已經把它作爲一個... – GeneralMike 2013-02-13 18:12:58

相關問題