2017-10-06 51 views
0

我无法使用多个排序描述符对CoreData App的基于视图的tableview进行排序。 我有2列,我的第一列有“bank”和“accountNickName”作为值,我的第二列有“bankAccount”。
我想按“银行”,然后“accountNickName”和“bankAccount”进行排序。如果我点击第一列。
我想按“bankAccount”,然后选择“银行”,然后选择“accountNickName”。
如果我点击第二列。
创建sortDescriptors的数组,这个绑定到我的arraycontroller不起作用:使用多种排序描述符对基于视图的tableview进行排序不起作用

sortForStockInfo = [ NSArray arrayWithObjects: 
          [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:YES selector:@selector(compare:)], 
          [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:YES selector:@selector(compare:)], 
          [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:YES selector:@selector(compare:)], 
          nil]; 

的tableview中有绑定到阵列控制器的“排序描述符”,“排序描述符”。我想,这就是我必须要做的。但它不起作用。我错过了什么?足够奇怪:如果我使用相同的方法,但我填写了Sortkey,Selector和Order的列属性,它仅对一个方面进行排序(例如,银行或帐户,accountNickName保持未排序)。因为我只能为每列定义一个标准。

回答

1

sortDescriptors是一个数组,点击列的sortDescriptor插入到索引0处。当用户点击列0然后点击列1时,排序顺序为column1,column0。 实施阵列控制器的代理方法- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn并设置sortDescriptors。例如:

- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn { 
    NSArray *sortDescriptors = self.arrayController.sortDescriptors; 
    if (sortDescriptors && [sortDescriptors count] > 0) { 
     NSSortDescriptor *firstSortDescriptor = sortDescriptors[0]; // sort descriptor of the clicked column 
     BOOL ascending = firstSortDescriptor.ascending; 
     if ([firstSortDescriptor.key isEqualToString:@"bank"]) { 
      self.arrayController.sortDescriptors = @[ 
       [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:ascending selector:@selector(compare:)], 
       [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:ascending selector:@selector(compare:)], 
       [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:ascending selector:@selector(compare:)]]; 
     } 
     else 
      if ([firstSortDescriptor.key isEqualToString:@"account"]) { 
       self.arrayController.sortDescriptors = @[ 
        [NSSortDescriptor sortDescriptorWithKey:@"account" ascending:ascending selector:@selector(compare:)], 
        [NSSortDescriptor sortDescriptorWithKey:@"bank" ascending:ascending selector:@selector(compare:)], 
        [NSSortDescriptor sortDescriptorWithKey:@"accountNickName" ascending:ascending selector:@selector(compare:)]]; 
      } 
    } 
} 
+0

完美!你的代码只是缺失的链接。 –