У меня есть следующий код, который сортируется по возрастанию.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"someproperty.name" ascending:YES];
NSMutableArray *sortedReleases = [NSMutableArray arrayWithArray:[unsortedarray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]];
[sortDescriptor release];
Я хочу сделать сортировку, где:
Покажите те, где за sortedRelease следует активный текущий пользователь (сложная логика, которая идет в функции??)
Это то, что мне нужно в моей пользовательской функции:
for (Release *release in sortedReleases){
if( [[[MainController sharedMainController] activeUser] isFollowingRelease:release] ){
return NSOrderedAscending;
}
}
Отсортируйте остальные, используя acsending (как это делается сейчас)
Как мне это сделать?
Я знаю, что задавал этот вопрос ранее, и, возможно, я задал его неправильно, но это было не то, что я искал. Я хочу иметь возможность сортировать на основе результата функции. А потом по алфавиту.
ОБНОВЛЕННЫЙ КОД:
NSArray *sortedReleases = [theReleases sortedArrayUsingComparator:^(id a, id b) {
Release *left = (Release*)a;
Release *right = (Release*)b;
if(( [[[MainController sharedMainController] activeUser] isFollowingRelease:left] )&&([[[MainController sharedMainController] activeUser] isFollowingRelease:right])){
//sort alphabetically ????
}
else if (([[[MainController sharedMainController] activeUser] isFollowingRelease:left])&&(![[[MainController sharedMainController] activeUser] isFollowingRelease:right]))
{
return (NSComparisonResult)NSOrderedDescending;
}
else if ((![[[MainController sharedMainController] activeUser] isFollowingRelease:left])&&([[[MainController sharedMainController] activeUser] isFollowingRelease:right]))
{
return (NSComparisonResult)NSOrderedAscending;
}
return [left compare:right]; //getting a warning here about incompatible types
}];