【发布时间】:2012-07-23 07:40:24
【问题描述】:
我正在尝试在我的应用程序中实现可搜索的表格视图,当有人可以搜索位置并获得结果时。它看起来像这样:
我从基因组.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";
},
我想要做的是如果“fcl”(在数组中看到)等于 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。
-
@rhooligan 我很乐意这样做......除了我不太确定该怎么做:P。指出正确的方向会很棒,谢谢!
-
你走了多远?您是否能够让解析器返回 NSDictionary 对象或类似对象的 NSArray?
-
解决这个问题的关键是认为每个 UITableView 背后都应该有一个核心索引数据模型(例如 NSArray),其中 indexpath 之间总是存在直接关系 - 这样你的UITableViewDelegate 代码变得简单。在这种情况下,当搜索文本更改时,您会重新计算此数组。当搜索被取消并且您想返回显示所有条目时,您应该保持原始数据源不变。
标签: iphone objective-c ios json filter