动态传递@selector

时间:2011-03-17 06:55:45

标签: ios iphone objective-c selector

根据ABPersonGetSortOrdering()的结果,我想按名字或姓氏对UILocalizedIndexCollat​​ion进行排序。

我在切换用于collat​​ionStringSelector参数的@selector时遇到问题。

简单地写这个很容易:

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 个答案:

答案 0 :(得分:7)

您就在那里,只需从@selector()左右移除sorter部分:

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