首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTableColumn错误地排列数字

NSTableColumn错误地排列数字
EN

Stack Overflow用户
提问于 2013-06-03 18:13:22
回答 2查看 215关注 0票数 1

这是一个带有IB绑定到NSTableView的NSArrayController,它正确地显示了所有的值。

然而,它只根据它们的第一个字符值对数字进行排序,例如,它将把115.31放在2.5以下,23.9低于4.71,等等。

它从保留的带有字符串的NSMutableArray中获取值,我还尝试将所有字符串转换为NSNumber/NSDecimalNumber,但仍然没有结果:

代码语言:javascript
复制
NSMutableArray *array1 = [[string1 componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]] mutableCopy];

NSMutableArray *array1alt = [NSMutableArray array];

for(NSString *strNum in array1)
{
    NSNumber *number = strNum;
    [array1alt addObject:number];
}

帮帮忙,谢谢。

编辑:--这是我的NSTableColumn的NSMutableArray(s)如何填充的:

代码语言:javascript
复制
NSMutableArray *rows = [NSMutableArray array];

for (NSUInteger i = 0; i < array1alt.count && i < array2.count && i < array3.count && i < array4.count; i++)
{
    NSMutableDictionary *row = [NSMutableDictionary dictionary];
    [row setObject:[array1alt objectAtIndex:i] forKey:@"Apples"];
    [row setObject:[array2 objectAtIndex:i] forKey:@"Oranges"];
    [row setObject:[array3 objectAtIndex:i] forKey:@"Peaches"];
    [row setObject:[array4 objectAtIndex:i] forKey:@"Plums"];
    [rows addObject:row];
}

[myArrayController2 setContent:rows2];
[aTableView reloadData];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-03 18:23:19

我感到惊讶的是,您没有收到编译器警告:

代码语言:javascript
复制
NSNumber *number = strNum;

你可能想:

代码语言:javascript
复制
NSNumber *number = [NSNumber numberWithDouble:[strNum doubleValue]];

或者,更简单地说:

代码语言:javascript
复制
NSNumber *number = @([strNum doubleValue]);

如果不想处理输出上的数字转换,可以对原始字符串数组进行排序,如下所示:

代码语言:javascript
复制
NSArray *array2 = [array1 sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    double num1 = [obj1 doubleValue];
    double num2 = [obj2 doubleValue];
    if (num1 < num2)
        return NSOrderedAscending;
    else if (num1 > num2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}];

如果您想使用十进制数,您可能会执行以下操作:

代码语言:javascript
复制
NSMutableArray *array2 = [NSMutableArray array];
for (NSString *strNum in array1)
{
    [array2 addObject:[NSDecimalNumber decimalNumberWithString:strNum]];
}

[array2 sortUsingComparator:^NSComparisonResult(NSDecimalNumber *obj1, NSDecimalNumber *obj2) {
    return [obj1 compare:obj2];
}];
票数 1
EN

Stack Overflow用户

发布于 2013-06-03 18:43:26

没有看到更多的代码,这就是我所想的:

如果我正确理解,您将NSArrayController作为数据源。

在将数据附加到表之前,需要对数据进行排序。

您有NSArrayController方法:

- (void)setSortDescriptors:(NSArray *)sortDescriptors

- (NSArray *)arrangeObjects:(NSArray *)objects

有了这个,您将得到排序数组,以便用于表。也许您需要调用reloadData of您的NSTableView。

我现在不能测试这些,因为我现在在笔记本电脑上,它没有MacOS :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16903131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档