NSTableView的自定义排序列

问题描述 投票:0回答:1

我正在尝试为 NSTableView 中的列实现自定义排序。此列的数据在自定义对象内包含双精度值,其中一些值为正,一些为负,一些为“不适用”(即该行无关紧要,应排序到底部)。

我在表视图中创建了一个比较方法,如下所示...

- (NSComparisonResult) myCompare:(id) obj1 : (id) obj2 {

    if (obj1 < obj2)
        return NSOrderedAscending;
    else if (obj1 > obj2)
        return NSOrderedDescending;
    else
        return NSOrderedSame; // they must be the same
};

...obj1 和 obj2 的比较实际上深入到了被比较对象的数据。

在我的故事板中,该列的排序键是:myObject

该列的选择器是:myCompare:

运行代码并单击我希望对结果进行排序的列:

线程 1:“-[__NSCFNumber myCompare:]:无法识别的选择器发送到实例 0x600003824740”

显然,事情的设置不太正确。我对 viewWillAppear 方法进行了一些更改以设置排序描述符,但出现了相同的错误。 如何让我的表视图识别并调用自定义排序例程?

objective-c interface-builder nstableview nssortdescriptor
1个回答
0
投票

我找出了问题所在,这与我的自定义比较方法有关,而不是我在故事板中所做的任何事情或设置排序描述符。 Apple 的表视图编程指南详细介绍了比较选择器,指出“此比较选择器需要一个参数”(Mac 的表视图编程指南),我一直期待一种采用一对参数(例如排序)的方法一个 NSArray。 正确的自定义比较方法位于将进行比较的自定义对象中,如下所示:

- (NSComparisonResult) myCompare:(id) obj {

    myObject  *objToCompare = (myObject *) obj;

    if (objToCompare.value < value)
        return NSOrderedAscending;
    else if (objToCompare.value > value)
        return NSOrderedDescending;
    else
        return NSOrderedSame; // they must be the same
};
© www.soinside.com 2019 - 2024. All rights reserved.