基本的なことをしようとしていますが、うまくいきません。
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
発生し、並べ替えが行われません。
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
私が探しているのは、NSNumber
「priority」という名前のプロパティに基づいて、オブジェクトの配列を降順で並べ替えることだけです。
このエラーが発生するのはなぜですか? おそらく非常に明白なことだとは思いますが、私はこれに 15 時間も悩まされてきました。どんな助けでも素晴らしいでしょう。