【问题标题】:Setting NSMutableArray after sorting排序后设置 NSMutableArray
【发布时间】:2011-06-23 22:11:56
【问题描述】:

我有一个 NSMutableArray 的 Marker 对象,它们显示在 UITableView 中。我有一个 segmentedControl 来对数据进行排序。当我像这样 NSLog 我的信息时,我知道按名称排序是有效的:

 // Create sort descriptors
    NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:descriptor, nil];
    NSArray *sortedArray = [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors];

    for (Marker *m in self.MarkersList) {
        NSLog(@"-Name: %@", m.Name);
    }
    for (Marker *m in sortedArray) {
        NSLog(@"sorted - Name: %@", m.Name);
    }

然后我不知道为 UITableView 重新加载数据的最佳方法。我以为我可以执行以下操作,但这基本上只是删除了所有对象,现在我在 self.MarkersList 中什么都没有。

  if ([segmentControl selectedSegmentIndex] == 0) {
        if (self.MarkersList != nil) {
            [self.MarkersList removeAllObjects];

            [self.MarkersList arrayByAddingObjectsFromArray:sortedArray];
            [self.MarkersTableView reloadData];
            NSLog(@"%s", __FUNCTION__);

            for (Marker *m in self.MarkersList) {
                NSLog(@"Name: %@", m.Name);
            }   
        }        
    }

在这一点上,我肯定遗漏了一些明显的东西。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: iphone uitableview nssortdescriptor


    【解决方案1】:

    替换:

    [self.MarkersList arrayByAddingObjectsFromArray:sortedArray];
    

    与:

    [self.MarkersList addObjectsFromArray:sortedArray];
    

    发现错误并高兴!

    【讨论】:

    • 对,因为arrayByAddingObjectsFromArray返回的是NEW数组,所以该方法不会向当前数组添加对象
    • 确实如此。以下方法也有效(但不是我推荐的方法) self.MarketsList = [NSArray arrayByAddingObjectsFromArray:sortedArray];
    • 谢谢大家!就知道会是这样。
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多