我是ios开发的新手,我正在尝试对由数组填充的tableview进行排序。我已经研究过其他解决方案,并且出于某种原因,tableview没有正确填充。数组按升序排序,但是tableview不会以正确的顺序显示对象。
以下是我的排序方法:
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_miles"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [_addObjects sortedArrayUsingDescriptors:sortDescriptors];
_objects = [NSMutableArray arrayWithArray:sortedArray];
这是我的cellforrow:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//NSLog(@"%@", _objects);
VenuesTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
CustomObject *currentObject = [_objects objectAtIndex:indexPath.row];
cell.venuesTitle.text = [currentObject nameOfVenue];
NSString *preDistance = @"about";
NSString *postDistance = @"miles";
cell.venuesSubTitle.text = [NSString stringWithFormat:@"%@ %@ %@", preDistance,[_miles objectAtIndex:indexPath.row] ,postDistance];
if (cell != nil) {
NSMutableString *imagePath = [NSMutableString stringWithFormat:@"%@", [_paths objectAtIndex:indexPath.row]];
[cell.venuesImage setContentMode:UIViewContentModeScaleAspectFit];
[cell.venuesImage setImageWithURL:[NSURL URLWithString:imagePath] placeholderImage:[UIImage imageNamed:@"placeholder@2x.png"]];
}
return cell;
}
当我注销_objects数组时,我按正确的顺序得到它们,但是它们没有在tableview中以正确的顺序出现(对象有一个我想要排序的里程属性)。
答案 0 :(得分:2)
您正在按_addObjects
对数组miles
进行排序并将结果存储在_objects
中,但是当您显示结果时,您无法访问{{1}你刚刚创建的那个排序数组,而是在其他数组中查找它。
我不知道你何时填充单独的miles
数组,但我建议你完全退出它,并确保从{{_miles
获取并设置miles
属性1}}实例。 (与CustomObject
相同...这应该是_paths
的属性,而不是单独的数组。)
答案 1 :(得分:0)
我没有看到任何明显的东西,但有些事情有点奇怪:
您不应该使用_objects
。始终使用self.objects
代替。大多数编程语言使得完全不可能直接访问指针,就像你在这里一样,并且有充分的理由。这很危险,可能导致像这样的混乱错误。您几乎不应该使用_foobar
访问属性。始终使用self.foobar
。
为什么使用NSMutableArray
代替NSArray
?你确定在其他地方修改它没有代码吗?
VenuesTableViewCell *cell
在哪里创建?我没有在代码中看到创建其中一个对象的任何内容。 [tableView dequeueReusableCellWithIdentifier..]
永远不会创建新单元格,它始终返回现有单元格,如果不存在则返回nil
。你的代码没有抛出断言错误(我假设?),所以很明显它永远不会返回nil
。但是,如果第一次调用它时没有返回nil
,会发生奇怪的事情吗?