我试图通过带有过滤区域韩国的AFNetworking框架从USGS地震中获取数据。我在方法tableView cellForRowAtIndexPath中显示数据存在问题。 tableview中的行数与数据地震的数量相同,但问题是为什么数据只显示来自韩国的第一次地震。
这是我的方法tableView cellForRowAtIndexPath的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
EarthquakeViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
NSArray *earthquakeFeaturesData = [self.earthquakeDataService features];
int indexEarthquake = 0;
for ( NSDictionary *earthquakeData in earthquakeFeaturesData){
if ([[earthquakeData title] containsString:@"California"]){
NSString *stringDate = [Helper convertMilisecondsToReadableStringDate:[earthquakeData updated]];
cell.placeLabel.font = [UIFont fontWithName:[NSString stringWithFormat:@"%@", GLOBAL_FONT_TYPE] size:14];
cell.placeLabel.text =[earthquakeData place];
cell.magLabel.font = [UIFont fontWithName:[NSString stringWithFormat:@"%@", GLOBAL_FONT_TYPE] size:25];
cell.magLabel.text = [NSString stringWithFormat:@"%@", earthquakeData.mag];
cell.mLabel.font = [UIFont fontWithName:[NSString stringWithFormat:@"%@", GLOBAL_FONT_TYPE] size:13];
cell.mLabel.text = [NSString stringWithFormat:@"Magnitude"];
cell.timeLabel.font = [UIFont fontWithName:[NSString stringWithFormat:@"%@", GLOBAL_FONT_TYPE] size:14];
cell.timeLabel.text = [NSString stringWithFormat:@"%@ ", stringDate];
NSLog(@"%@", earthquakeData.mag);
indexEarthquake++;
NSLog(@"%i", indexEarthquake)
}
}
return cell;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if(!self.earthquakeDataService)
return 0;
else{
NSArray *earthquakeFeaturesData = [self.earthquakeDataService features];
int indexEarthquake = 0;
for ( NSDictionary *earthquakeData in earthquakeFeaturesData){
if ([[earthquakeData title] containsString:@"California"]){
indexEarthquake++;
}
}
NSLog(@"%i",indexEarthquake);
return indexEarthquake;
}
}
我认为问题是因为我需要数组来保存来自USGS的临时数据并在迭代后呈现它。那么,如何解决这个问题??
答案 0 :(得分:1)
为表视图中的每个单元格调用一次cellForRowAtIndexPath。每次调用它时都会执行相同的操作,从索引0开始并遍历数据。因为所有单元格都包含相同的数据。您应该使用indexPath选择要使用的数据。如果你在加载到tableview之前开始过滤数据而不是动态地尝试这样做,那可能会更容易。