BAD_ACCESS

おもにiOS、ときどき変な電子工作、ガジェット話。

JSONで取得したデータのソートがうまくいかない場合の対応

idとcontentsの2つのキーを持ったオブジェクトmessages(NSArray)を JSONで受け取り、idの値でソートしたい場合。

- (NSArray *)sortByRecentMessages:(NSArray*)messages
{
    NSSortDescriptor *sortByRecent = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortByRecent,nil];
    NSArray *sortedArray = [messages sortedArrayUsingDescriptors:sortDescriptors];
    return sortedArray;
}

上記のコードで実行してもうまくソートしてくれない。
どうもJSONで受け取った時にidを数値としてではなく文字列として扱ってしまっているためらしい。

キーとなる値@"id"を@"id.intValue"とすることで正しくソートできるようになった。

- (NSArray *)sortByRecentMessages:(NSArray*)messages
{
    NSSortDescriptor *sortByRecent = [NSSortDescriptor sortDescriptorWithKey:@"id.intValue" ascending:NO];//←ココ
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortByRecent,nil];
    NSArray *sortedArray = [messages sortedArrayUsingDescriptors:sortDescriptors];
    return sortedArray;
}

Key Value Coding まわりの理解をすすめる必要があるのでそのあたりは今後詳しく勉強した結果を書くつもり。