Лучший способ сделать это - создать собственный дескриптор сортировки, используя sortDescriptorWithKey: ascending: comptor: метод. Это позволяет вам создать собственную функцию сравнения, которую вы указываете с помощью блока.
Сначала создайте функцию сравнения. Если вы никогда не программировали с блоками , сейчас самое время учиться!
NSComparisonResult (^myStringComparison)(id obj1, id obj2) = ^NSComparisonResult(id obj1, id obj2) {
// Get the first character of the strings you're comparing
char obj1FirstChar = [obj1 characterAtIndex:0];
char obj2FirstChar = [obj2 characterAtIndex:0];
// Check if one (but not both) strings starts with a '#', and if so, make sure that one is sorted below the other
if (obj1FirstChar == '#' && obj2FirstChar != '#') {
return NSOrderedDescending;
} else if (obj2FirstChar == '#' && obj1FirstChar != '#') {
return NSOrderedAscending;
}
// Otherwise return the default sorting order
else {
return [obj1 compare:obj2 options:0];
}
};
Теперь, когда у вас есть функция сравнения, вы можете использовать ее для создания дескриптора сортировки:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:[dataSource keyName] ascending:YES comparator:myStringComparison];
Теперь вы можете использовать этот дескриптор сортировки так же, как и любой другой, и в вашем списке будут # элементы, отсортированные до конца!