gpt4 book ai didi

objective-c - 使用转换后的值对 NSTableColumn 进行排序

转载 作者:行者123 更新时间:2023-12-03 16:37:15 25 4
gpt4 key购买 nike

我的类有一个枚举属性。此属性绑定(bind)到 NSTableColumn

typedef enum _Status
{
Unknown=0,
Win,
OSX
} Status;

为了确保 NSTableColumn 显示正确的字符串表示形式,而不是显示数字 0、1 和 2,我使用 NSValueTransformer

因此Unknown 变为“未知操作系统”。 Win 变为“MS Windows”,OSX 变为“OSX 10.8”。表格列正确显示这些值。

我需要使用转换后的值对列进行排序。如果我使用

[NSSortDescriptor sortDescriptorWithKey:@"status"
ascending:YES
selector:@selector(compare:)];

该列按以下顺序排序:

未知操作系统
微软 window
OSX 10.8

这确实有意义,因为 0 < 1 < 2。但我要求它使用对应的字符串进行排序,这将使其:

微软 window
OSX 10.8
未知操作系统

如何在不改变枚举顺序的情况下做到这一点?

最佳答案

您在选择器中使用标准的 compare: 方法。它只是比较枚举。创建您自己的方法,按照您想要的方式进行比较。它可以调用您的 NSValueTransformer 来获取字符串值,然后您比较这些值,并返回适当的 NSComparisonResult。

[编辑]好吧,我的第一个建议不会轻易起作用(不使用类别)。但像这样的事情应该。假设 myValueTransformer 已经实例化,并且您的状态是 NSNumber:

sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"status" ascending: YES             
comparator:^(id first, id second){
NSNumber* firstNum = (NSNumber*)first;
NSNumber* secondNum = (NSNumber*)second;
if ([myValueTransformer transformedValue:firstNum] == [myValueTransformer transformedValue:secondNum]) {
return NSOrderedSame;
} else if ([myValueTransformer transformedValue:firstNum] > [myValueTransformer transformedValue:secondNum]) {
return NSOrderedDescending;
} else {
return NSOrderedAscending;
}
}];

关于objective-c - 使用转换后的值对 NSTableColumn 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com