2014-07-21 36 views
0

嗨stackoverflow社區, 我有點問題讓NSPredicate工作,因爲我想。我有一個從plist填充的數組,以及從一些Google Places JSON數據填充的數組。長話短說,我需要檢查我的plist數組是否存在谷歌地方。爲此,我使用NSPredicate。我的代碼部分工作,例如它會在這兩個列表中找到「McDonalds」,但未找到「Jimmy John's」。我注意到的一件事是我的plist被稱爲「Jimmy John's」,在Google Places API中被稱爲「Jimmy John's Gourmet Sandwich」。我希望它找到這場比賽,但它不。任何幫助將不勝感激。NSPredicate不按預期工作

for (NSDictionary *jsonname in nameFromJSON) 
{ 
NSPredicate *inBothLists = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@, jsonname]; 
NSArray *arrayFoundInBoth = [nameFromPlist filteredArrayUsingPredicate: inBothLists]; 
} 
+0

你想通過字典鍵過濾字典的數組? – mohacs

+0

nameFromJSON是一個包含谷歌地點信息的數組。 for循環遍歷數組中的每個項目並使用謂詞對其進行檢查。有一個更好的方法嗎? – hansoac

+0

預測是好的,但無法理解您的搜索條件。結帳這[問題和答案](http://stackoverflow.com/questions/24839599/how-do-i-filter-array-of-dictionaries-by-dictionary-key/24839788#24839788)它可以幫助。 – mohacs

回答

0

我最終解決了這個問題!我的謂詞很好,我調整的唯一方法就是我如何使用它。

在我使用JSON數據查看PLIST之前。我扭轉了這種情況,並讓PLIST查看了我拉下來的JSON數據。這解決了問題!謝謝大家的幫助!

0

我看到您通過包含字典數據來過濾數據。這意味着

fiteredObj isEqual: jsonname 

肯定你的代碼無法正常工作 你可以嘗試按名稱或關鍵字

for (NSString *jsonname in [nameFromJSON objectForKey:@"nameKey"]) 
{ 
NSPredicate *inBothLists = [NSPredicate predicateWithFormat:@"SELF.name CONTAINS[c] %@, jsonname]; 
NSArray *arrayFoundInBoth = [nameFromPlist filteredArrayUsingPredicate: inBothLists]; 
} 

過濾數據,希望這有助於

+0

我試過這個Huy並得到相同的結果。它會發現麥當勞,因爲名稱完全匹配,但它不會找到「吉米約翰美食三明治」。我找不到它只用 「吉米約翰的」而不是全名約翰吉米美食三明治 – hansoac

+0

「吉米約翰的」和「吉米約翰斯」不一樣。所以filteredArray不能正常工作。請確切定義名稱https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html –

+0

對不起,我犯了一個錯字。在PList中的確切名稱是「Jimmy John's」,來自JSON的確切名稱是「Jimmy John的美食三明治」。它應該仍然沒有問題,對不對? – hansoac

0

答案以上是正確的! SELF是一個NSDictionary而不是一個NSString,我最終解決了這個問題!