Передача @selector динамически - PullRequest
4 голосов
/ 17 марта 2011

В зависимости от результата ABPersonGetSortOrdering (), я хочу отсортировать UILocalizedIndexCollation по имени или фамилии.

У меня проблемы с переключением @selector, используемого для параметра collationStringSelector.

Было бы очень легко просто написать это подробно:

NSArray *sortedSubarray;
if (ABPersonGetSortOrdering() == 0) {
    sortedSubarray = [collation sortedArrayFromArray:[sections objectAtIndex:section] collationStringSelector:@selector(fname)];
} else {
    sortedSubarray = [collation sortedArrayFromArray:[sections objectAtIndex:section] collationStringSelector:@selector(lname)];
}

Я попробовал что-то вроде этого без удачи:

SEL sorter = ABPersonGetSortOrdering() == 0 ? NSSelectorFromString(@"fname") : NSSelectorFromString(@"lname");
sortedSubarray = [collation sortedArrayFromArray:[sections objectAtIndex:section] collationStringSelector:@selector(sorter)];

Я пробовал и другие идеи, и, похоже, ничего не работает.

Есть ли лучший способ передать имя селектора динамически?

1 Ответ

7 голосов
/ 17 марта 2011

Вы почти у цели, просто удалите часть @selector() из sorter:

sortedSubarray = [collation sortedArrayFromArray:[sections objectAtIndex:section] collationStringSelector:sorter];
...