Я не пробовал это, но NSDictionaryController поддерживает сортировку.По этой ссылке есть пример .
ОП хочет отсортировать по ключу в одном случае и отсортировать по значению в другом.Ответ на его вопросы в следующем виде:
NSSortDescriptor *caseInsensitiveDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"key" ascending: YES selector: @selector(caseInsensitiveCompare:)] autorelease];
[dictionaryController setSortDescriptors: [NSArray arrayWithObject: caseInsensitiveDescriptor]];
NSDictionaryController наследуется от NSArrayController и, вероятно, реализует массив, как вы рассматривали, но делает это прозрачно (вам не нужно писать код).