2014-05-04 83 views
1

過濾詞典的陣列I具有字典的以下數組:通過使用謂詞

Printing description of newOrderbookBids: 
<__NSArrayI 0x10053e7c0>(
{ 
    price = "10.14"; 
    size = 148; 
}, 
{ 
    price = "10.134"; 
    size = 0; 
}, 
{ 
    price = "10.131"; 
    size = 321; 
}) 

陣列中的每個字典具有鍵pricesize,無論是數字。

我想返回一個已過濾的數組,其中只包含size > 0的字典。在這個例子中,這將是與字典#1和#3的排列,但沒有字典#2:

({ 
     price = "10.14"; 
     size = 148; 
    }, 
    { 
     price = "10.131"; 
     size = 321; 
    }) 

我曾嘗試下面的代碼段按大小篩選我NSArray *newOrderbookBids

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size > 0"]; 
newOrderbookBids = [newOrderbookBids filteredArrayUsingPredicate:predicate]; 

不幸的是我的代碼與運行時錯誤

[NSSymbolicExpression compare:]: unrecognized selector sent to instance xxxx 

什麼是錯我的代碼和謂語崩潰? 我如何過濾size > 0

謝謝!

回答

1

「SIZE」是"Predicate Format String Syntax" 中的保留關鍵字,關鍵字不區分大小寫。

爲了解決這個問題,使用 「%K」 格式參數作爲VAR ARG取代一個 關鍵路徑

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > 0", @"size"]; 
+0

完美!這是解決方案! – AlexR

1

保留字

以下字保留:

AND,OR,IN,NOT,ALL,ANY,SOME,NONE,LIKE,CASEINSENSITIVE,CI,MATCHES,CONTAINS,BEGINSWITH,ENDSWITH,BETWEEN,NULL,NIL,SELF,TRUE,YES,FALSE,NO,FIRST ,最後,尺寸,ANYKEY,SUBQU ERY,CAST,TRUEPREDICATE,FALSEPREDICATE

發生這種情況時更清晰的錯誤信息會很好。

+0

我同意你的錯誤信息是非常具有誤導性的。謝謝你的保留字列表。從來沒有想過這是錯誤。 – AlexR

+0

我記得一會兒把頭髮撕掉了。我確定FIRST,LAST和SIZE總是與人們的數據模型相沖突。 –