2014-07-21 231 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,我最终解决了这个问题!