Это потому, что код ascii '_' больше, чем '0'.
Я не знаю, можете ли вы заменить '_' на '-', например? Это исправит вашу проблему, и вы сможете использовать sortedArrayUsingSelector
.
Если вы не можете сделать:
[str stringByReplacingOccurancesOfString:@"_" withString:@"-"]
Затем отсортируйте ваш массив и, наконец, замените ваш '-' на '_'.
(это просто решение ... не самое лучшее ^^)