Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 当尝试使用NSSortDescriptor对NSMutableArray排序时,我得到了无法识别的选择器_Objective C_Nsmutablearray_Nssortdescriptor - Fatal编程技术网

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

Objective c 当尝试使用NSSortDescriptor对NSMutableArray排序时,我得到了无法识别的选择器,objective-c,nsmutablearray,nssortdescriptor,Objective C,Nsmutablearray,Nssortdescriptor,我正在尝试做一些看起来很基本的事情,但我不能让它开始工作 我正在跟踪类似对象的NSMutableArray。对象有一个名为“priority”的NSNumber@属性,我正在初始化它,如下所示: [self setPriority:[[NSNumber alloc] initWithInt:2]]; 但是,当我尝试排序时: NSSortDescriptor * frequencyDescriptor = [[NSSortDescriptor alloc] initWithKey:@"prior

我正在尝试做一些看起来很基本的事情,但我不能让它开始工作

我正在跟踪类似对象的
NSMutableArray
。对象有一个名为“priority”的
NSNumber
@
属性,我正在初始化它,如下所示:

[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
#导入
@接口任务:NSObject
@属性字符串*名称;
@财产编号*优先权;
@属性字符串*注释;
@属性NSString*taskID;
@结束
以下是崩溃前任务数组中NSNumber的内容:
2013-01-03 13:55:50.056 MyApp[9682:303],10
2013-01-03 13:55:50.057 MyApp[9682:303],2
2013-01-03 13:55:50.057 MyApp[9682:303],3
2013-01-03 13:55:50.057 MyApp[9682:303],2
2013-01-03 13:55:50.058 MyApp[9682:303],6
2013-01-03 13:55:50.058 MyApp[9682:303],2
2013-01-03 13:55:50.058 MyApp[9682:303],2
2013-01-03 13:55:50.058 MyApp[9682:303],5
我要找的就是根据名为“priority”的
NSNumber
属性按降序对对象数组进行排序


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

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


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

哪一行会引发异常?嗨,卡尔。这行代码是:NSArray*sortedArray=[tasks sortedArray usingdescriptor:descriptor];请将您的任务类声明添加到问题中。是否发布堆栈跟踪?@isosigma-类声明看起来不错,我建议在Xcode中添加一个异常断点,以便更好地跟踪引发错误的位置和原因。谢谢。我发布了上面任务的运行时数组内容。它看起来只填充了任务对象。我在启动时通过NSKeyedUnarchiver填充数组,如下所示:tasks=[NSKeyedUnarchiver unarchiveObjectWithFile:fullDataFilePathWithFileName];好吧您是否已打印出它们的
优先级
值?添加到上面。我在遍历时注意到一些东西-SorterDarray被列为具有无效指针。这可能是原因吗?如果是这样,我不知道如何修复它…我放弃了NSNumber属性,只是开始使用NSString,并使用NSSortDescriptor*frequencyDescriptor=[[NSSortDescriptor alloc]initWithKey:@“priority”升序:是选择器:@selector(localizedStandardCompare:)];-我不知道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