我想做一些似乎基本的东西,但我不能得到工作。
我在跟踪相似对象的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
关于这个主题还有其他问题和答案,但是在我尝试使用NSSortDescriptor
对NSNumber
属性进行排序的每种情况下,我都会得到完全相同的错误,并且排序不会发生。
下面是任务类头文件:
#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
所有我正在寻找的是有我的对象数组按降序排序基于NSNumber
属性命名为"优先级"。
为什么我得到这个错误?我知道这可能是很明显的事情,但我已经在这个问题上纠结了15个小时了。
我的猜测是tasks
中的条目具有优先级值,这些值是不同类型对象的混合,其中至少有一个是数组,至少有一个是NSNumber。然后compare尝试比较两者,并将-length
消息发送给无法处理的号码。
研究堆栈跟踪将有助于确认这是否正确,并且还应该让您了解异常被抛出的原因。