NSArray と NSMutableArray の ソート方法をメモっとく。
出来てしまえば大した事ではないんだけど、結構時間とられた。。。
検索するとよく見かけるのが、比較関数を用意する方法です。
Sun Limited Mt.「NSArray のソート方法」
ですが、ちと面倒くさいなぁと思いながらよく見ると別の方法の照会が
CoreData の NSFetchedResultsController でよく使う NSSortDescriptor が NSArray でも使えるんですね〜
こちらの方が個人的にはしっくりきます。
で、ソートした配列の内容を変更しようと思ったのですが、NSArray は変更できません。。。。
そんな場合は NSMutableArray を使用します。
NSMutableArrayクラスは、NSArrayを可変としたい場合に使用するクラスで、NSArrayを継承していますので、NSArrayのメソッドはそのまま使用できます。
ところが、いざ配列の内容を変更し replaceObjectAtIndex を呼び出すとこんなエラーが。。。
unrecognized selector sent to instance 0xdb0a3e0
1 2 3 4 5 6 7 |
NSArray *array = [[NSArray alloc] initWithObjects:@"test1", @"test2", nil]; NSMutableArray *marray = (NSMutableArray *)array; NSSortDescriptor *sortDispNo = [[[NSSortDescriptor alloc] initWithKey:@"sortkey" ascending:NO] autorelease]; NSArray *sortDescArray = [NSArray arrayWithObjects:sortDispNo, nil]; [marray sortedArrayUsingDescriptors:sortDescArray]; |
1 2 3 4 5 6 7 8 |
NSArray *array = [[NSArray alloc] initWithObjects:@"test1", @"test2", nil]; NSSortDescriptor *sortDispNo = [[[NSSortDescriptor alloc] initWithKey:@"sortkey" ascending:NO] autorelease]; NSArray *sortDescArray = [NSArray arrayWithObjects:sortDispNo, nil]; [array sortedArrayUsingDescriptors:sortDescArray]; NSMutableArray *marray = [NSMutableArray arrayWithArray:array]; |
1 |
NSMutableArray *marray = [NSMutableArray arrayWithArray:array]; |
1 |
NSMutableArray *marray = [array mutableCopy]; |
[…] ゲームのランキングを作るときに必要になったので、その処理をメモっておきます。このサイトを参考にさせて頂きました→NSArray と NSMutableArray の ソート方法 […]