当尝试使用NSSortDescriptor对NSMutableArray进行排序时,我得到了无法识别的选择器

时间:2013-01-03 05:15:08

标签: objective-c nsmutablearray nssortdescriptor

我正在尝试做一些看似基本的事情,但我不能让它发挥作用。

我正在追踪NSMutableArray个相似物体。对象有NSNumber @ property称为“优先级”,我正在初始化,如下所示:

[self setPriority:[[NSNumber alloc] initWithInt:2]];

但是,当我尝试排序时:

NSSortDescriptor * frequencyDescriptor = [[NSSortDescriptor alloc] initWithKey:@"priority" ascending:YES];
NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil];
NSArray * sortedArray = [tasks sortedArrayUsingDescriptors:descriptors]; //This line throws the exception

我收到此错误:

-[__NSCFNumber length]: unrecognized selector sent to instance 0x2c7

关于这个主题还有其他问题和答案,但是在我尝试使用NSSortDescriptorNSNumber属性进行排序的每种情况下都会得到完全相同的错误,并且排序不会发生

这是Task类标题:

#import <Foundation/Foundation.h>

@interface Task : NSObject <NSCoding>

@property NSString *name;
@property NSNumber *priority;
@property NSString *note;
@property NSString *taskID;

@end

以下是崩溃前任务数组中NSNumber的内容:

2013-01-03 13:55:50.056 MyApp[9682:303] <Task: 0x10192c160>, 10
2013-01-03 13:55:50.057 MyApp[9682:303] <Task: 0x10192bc60>, 2
2013-01-03 13:55:50.057 MyApp[9682:303] <Task: 0x10190fda0>, 3
2013-01-03 13:55:50.057 MyApp[9682:303] <Task: 0x10192c6f0>, 2
2013-01-03 13:55:50.058 MyApp[9682:303] <Task: 0x10192c870>, 6
2013-01-03 13:55:50.058 MyApp[9682:303] <Task: 0x10192d1d0>, 2
2013-01-03 13:55:50.058 MyApp[9682:303] <Task: 0x10192d330>, 2
2013-01-03 13:55:50.058 MyApp[9682:303] <Task: 0x10192c530>, 5

我正在寻找的是根据名为“priority”的NSNumber属性,按降序排序我的对象数组。

为什么我收到此错误?我知道这可能是非常明显的事情,但我已经坚持了15个小时。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我的猜测是tasks中的条目具有优先级值,这些优先级值是不同类型对象的混合,其中至少有一个是数组,并且至少有一个是NSNumber。然后比较尝试比较两者,并将-length消息发送到无法处理它的号码。

研究堆栈跟踪有助于确认这是否正确,并且还应该让您了解抛出异常的原因。