使用多个排序描述符对基于视图的表视图进行排序不起作用
Sorting a viewbased tableview with multiple sort descriptors doesn't work
我无法使用多个排序描述符对 CoreData 应用程序的基于视图的表视图进行排序。
我有 2 列,我的第一列有 "bank" 和 "accountNickName" 作为值,我的第二列有 "bankAccount".
我想按 "bank" 然后按 "accountNickName" 排序,然后按 "bankAccount" 排序。如果我点击第一列。
我想按 "bankAccount"、"bank"、"accountNickName"、
排序
如果我点击第二列。
创建一个 sortDescriptors 数组并将其绑定到我的 arraycontroller 不起作用:
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];
表格视图 "Sort Descriptors" 绑定到数组控制器的 "Sort Descriptors"。我想,这就是我必须做的。但它不起作用。我错过了什么?
够奇怪了:如果我使用相同的方法,但我填充了 Sortkey、Selector 和 Order 的列属性,则它仅针对一个方面进行排序(例如银行或帐户。accountNickName 保持未排序)。因为我只能为每一列定义一个标准。
sortDescriptors
是一个数组,被点击列的sortDescriptor插入到索引0处。当用户点击第0列,再点击第1列时,排序顺序为第1列,第0列。
实现委托方法 - (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn
并设置 arraycontroller 的 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:)]];
}
}
}
我无法使用多个排序描述符对 CoreData 应用程序的基于视图的表视图进行排序。
我有 2 列,我的第一列有 "bank" 和 "accountNickName" 作为值,我的第二列有 "bankAccount".
我想按 "bank" 然后按 "accountNickName" 排序,然后按 "bankAccount" 排序。如果我点击第一列。
我想按 "bankAccount"、"bank"、"accountNickName"、
排序
如果我点击第二列。
创建一个 sortDescriptors 数组并将其绑定到我的 arraycontroller 不起作用:
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];
表格视图 "Sort Descriptors" 绑定到数组控制器的 "Sort Descriptors"。我想,这就是我必须做的。但它不起作用。我错过了什么?
够奇怪了:如果我使用相同的方法,但我填充了 Sortkey、Selector 和 Order 的列属性,则它仅针对一个方面进行排序(例如银行或帐户。accountNickName 保持未排序)。因为我只能为每一列定义一个标准。
sortDescriptors
是一个数组,被点击列的sortDescriptor插入到索引0处。当用户点击第0列,再点击第1列时,排序顺序为第1列,第0列。
实现委托方法 - (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn
并设置 arraycontroller 的 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:)]];
}
}
}