2010-05-11 70 views
1

我有一個NSDictionary對象的數組。 這些字典是從JSON文件中解析出來的。 NSDictionary中的所有值對象均爲NSString類型,一個鍵稱爲「distanceInMeters」。在應用NSPredicate時投射NSDictionary值?

我曾計劃在過濾使用NSPredicate這些陣列,所以我開始是這樣的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters <= %f)", newValue]; 
NSArray *newArray = [oldArray filteredArrayUsingPredicate:predicate]; 

我相信,如果爲「distanceInMeters」鍵的值是一個NSNumber這會工作,但由於我從JSON文件中獲得了一切,都是NSStrings。 上面給出了這個錯誤:****** - [NSCFNumber length]:無法識別的選擇器發送到實例0x3936f00 ***

這是有道理的,因爲我剛剛嘗試將NSString作爲NSNumber對待。

有沒有一種方法可以在字典過濾時將字典中的值進行轉換,或者採用完全不同的方式來解決此問題?

希望有人能幫助我:)

回答

7

試試這個:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters.floatValue <= %f)", newValue]; 
+0

嗨荷馬 謝謝你做了這個把戲:)我不知道你可以像這樣鍵入,NSP預測NSManagedObjects對我來說是新的東西:) 再次感謝 – RickiG 2010-05-11 20:15:52

+1

僅供參考,它不是類型轉換;它只是在NSString上調用「floatValue」方法。 – 2010-05-11 21:15:54

+0

唉感謝我得到它,它當然直接訪問屬性而不是訪問器[NSString floatValue] :) – RickiG 2010-05-12 11:15:04

0

你的問題不是謂詞;你的問題是你正在處理NSString對象而不是處理NSNumber對象。我會把時間集中在首先將它們更改爲NSNumbers,然後驗證它不起作用。

僅供參考,不JSON Framework號的自動解析到NSNumbers ...

+0

喜戴夫,謝謝你,是的,我也寧願對付正確類型:) 我看着我正在使用的JSON庫,它掃描數字。然後我嘗試了這個: \t BOOL theBool = [[dict objectForKey:@「distanceInMeters」] isKindOfClass:[NSString class]]; (@「bool的值是%@ \ n」,(theBool?@「YES」:@「NO」)); 它回來是的,所以毫無疑問。我正在使用SBJSON,它可能是它根本沒有工作? – RickiG 2010-05-11 19:59:54

相關問題