Objective-Cの高速列挙(for ... in ...)は便利ですが、NSDictionaryに対して適用した場合は列挙される順番が保証されません。
順番通りじゃないと困るときの策をメモ。
// 一旦NSDictionaryのキーを取得
NSArray *keys = [dictionary allKeys];
// sortedArrayUsingComparatorを使ってソート
keys = [keys sortedArrayUsingComparator:^(id o1, id o2) {
return [o1 compare:o2];
}];
// 順番通りに値を取得
for (id key in keys) {
[array addObject:[dictionary objectForKey:key]];
}
オリジナルのObjectをソートするときはsortedArrayUsingComparatorの中身を変更すれば実装できると思います。