【问题标题】:UITableView sort with NSSortDescriptor and UISegmentedControl doesn’t work使用 NSSortDescriptor 和 UISegmentedControl 的 UITableView 排序不起作用
【发布时间】:2015-05-30 22:45:29
【问题描述】:

我想使用分段控件对我的表格视图进行排序,并按我的数据核心中的值对其进行排序。根据 Apple 文档,我下面的代码应该可以工作,但它什么也没做。

谁能告诉我我做错了什么?

- (void)viewDidLoad {
  [super viewDidLoad];

    UISegmentedControl *statFilter = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"A - Z", @"Stock", @"Price", nil]];
    [statFilter sizeToFit];
    [statFilter addTarget:self action:@selector(MySegmentControlAction:) forControlEvents: UIControlEventValueChanged];
    self.navigationItem.titleView = statFilter;

    self.artists = [[ArtistDataStore sharedStore] artists];
    [self.tableView reloadData];

    self.tableView.rowHeight = 60;

}


- (void)MySegmentControlAction:(UISegmentedControl *)segment
{
    NSArray *arrayToSort = [[ArtistDataStore sharedStore] artists];


    if(segment.selectedSegmentIndex == 0)
    {

        NSArray * result = [arrayToSort valueForKey:@"name"];

        NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
        result = [result sortedArrayUsingDescriptors:@[sd]];

    }
    if(segment.selectedSegmentIndex == 1)
    {
        NSArray * result = [arrayToSort valueForKey:@"stock"];

        NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
        result = [result sortedArrayUsingDescriptors:@[sd]];

    }
    if(segment.selectedSegmentIndex == 2)
    {
        NSArray * result = [arrayToSort valueForKey:@"price"];

        NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
        result = [result sortedArrayUsingDescriptors:@[sd]];

    }

    [self.tableView reloadData];
}

【问题讨论】:

    标签: objective-c uitableview uisegmentedcontrol nssortdescriptor


    【解决方案1】:
    NSArray *arrayToSort = [[ArtistDataStore sharedStore] artists];
    NSString *key;
    if (segment.selectedSegmentIndex == 0)
    {
        key = @"name";
    }
    else if (segment.selectedSegmentIndex == 1)
    {
        key = @"stock";
    }
    else if (segment.selectedSegmentIndex == 2)
    {
        key = @"price";
    }
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:YES];
    self.artists = [arrayToSort sortedArrayUsingDescriptors:@[sortDescriptor]];
    
    [self.tableView reloadData];
    

    我假设当您在tableView:cellForRowAtIndexPath: 中配置单元格时,您使用self.artists 数组来存储数据。因此,在MySegmentControlAction: 中,您应该更新该数组,而不是从未真正使用过的results 数组。您也没有使用密钥设置 sortDescriptor。我已经在上面的代码中更正了它。

    这假定artists 数组的每个成员都有名为“名称”、“库存”和“价格”的属性。

    【讨论】:

      【解决方案2】:

      您是否尝试使用要排序的属性创建 NSSortDescriptor?而不是零?

      - (void)MySegmentControlAction:(UISegmentedControl *)segment
      {
          NSArray *arrayToSort = [[ArtistDataStore sharedStore] artists];
          if(segment.selectedSegmentIndex == 0)
          {
              NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
              result = [arrayToSort sortedArrayUsingDescriptors:@[sd]];
          }
      
          [self.tableView reloadData];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多