按属性排序对象数组

时间:2014-04-06 01:40:34

标签: ios objective-c

我是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中以正确的顺序出现(对象有一个我想要排序的里程属性)。

2 个答案:

答案 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,会发生奇怪的事情吗?