我试图在我的应用程序中实现可搜索的tableview,当有人可以搜索某个位置并获得结果时。它看起来是这样的:从JSON过滤NSArray?
我从genomes.com这使得更多的则只是城市让我的消息来源,它也有公园,建筑物,县,等我想只显示其位置是城市。
数据是由JSONKit解析的JSON文件。整个文件进入(最多20个对象),然后可搜索的表格视图显示它。我不确定是否应该以不同的方式解析JSON文件,或者如果我应该让表视图仅显示需要的结果。 (在这种情况下的性能不是问题。)。 JSON文件被转换为NSArray。
这里是阵列的一部分:
{
adminCode1 = MA;
adminCode2 = 027;
adminName1 = Massachusetts;
adminName2 = "Worcester County";
adminName3 = "";
adminName4 = "";
adminName5 = "";
continentCode = NA;
countryCode = US;
countryName = "United States";
elevation = 178;
fcl = A;
fclName = "country, state, region,...";
fcode = ADMD;
fcodeName = "administrative division";
geonameId = 4929431;
lat = "42.2000939";
lng = "-71.8495163";
name = "Town of Auburn";
population = 0;
score = "53.40083694458008";
timezone = {
dstOffset = "-4";
gmtOffset = "-5";
timeZoneId = "America/New_York";
};
toponymName = "Town of Auburn";
},
我想要做的是,如果“整箱”(数组中看到的)等于P,那么我希望它表明,在表视图。如果“fcl”是其他角色,那么我不希望它在表格视图中看到。我很确定if语句可以做到这一点,但我不知道如何得到它,以便过滤它的一部分。
任何帮助,将不胜感激!由于
编辑:截至目前,这是代码搜索:
- (void)delayedSearch:(NSString*)searchString
{
[self.geoNamesSearch cancel];
[self.geoNamesSearch search:searchString
maxRows:20
startRow:0
language:nil];
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
self.searchDisplayController.searchBar.prompt = NSLocalizedStringFromTable(@"ILGEONAMES_SEARCHING", @"ILGeoNames", @"");
[self.searchResults removeAllObjects];
// Delay the search 1 second to minimize outstanding requests
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(delayedSearch:) withObject:searchString afterDelay:0];
return YES;
}
如果你没有收到大量的结果,那么最简单的方法可能就是放弃你不想要的结果。 IE:让JSON解析器做它的事情,循环遍历结果并将感兴趣的记录复制到新的NSMutableArray中。 – Brian 2012-07-24 22:28:42
@rhooligan我很乐意这样做......除非我真的不知道该怎么做:P。正确的方向将是伟大的,谢谢! – sridvijay 2012-07-24 22:30:31
你有多远?你是否能够让解析器返回一个NSArray对象或类似的NSArray? – Brian 2012-07-24 22:33:04