Objective c 将目标添加到选择器

Objective c 将目标添加到选择器,objective-c,Objective C,我想知道如何将目标设置为选择器。我想打这个电话>> sortedArray = [views sortedArrayUsingSelector:@selector(compareWithUnit:)]; 问题是我的compareWithUnit函数在LogUnit类中。我应该如何告诉编译器在LogUnit类中查找选择器 视图数组只包含日志单元(UIViewController)对象,我想按[LogUnit day]结果对视图数组进行排序 - (NSComparisonResult) c

我想知道如何将目标设置为选择器。我想打这个电话>>

    sortedArray = [views sortedArrayUsingSelector:@selector(compareWithUnit:)];
问题是我的
compareWithUnit
函数在
LogUnit
类中。我应该如何告诉编译器在
LogUnit
类中查找选择器

视图
数组只包含
日志单元
(UIViewController)对象,我想按
[LogUnit day]
结果对
视图
数组进行排序

- (NSComparisonResult) compareWithUnit:(LogUnit*) unit;
{
    return [[self dayTime] compare:[unit dayTime]];
}
发件人:

比较器消息被发送到数组中的每个对象,并将数组中的另一个对象作为其单个参数

所以,
comparator
应该是组成数组的对象的一种方法。排序时,将向数组中的每个对象发送该消息

如果
views
数组包含
LogUnit
对象,并且
LogUnit
定义了一个
compareWithUnit:
方法,那么它将工作。否则,您将发生崩溃

无法更改此行为,因为它是在
NSArray
中硬编码的

顺便说一下,没有办法将目标包含在选择器定义中,因为目标是一个对象(即运行时存在的实体),而选择器只是您发送给对象的消息的名称


将类规范添加到选择器的想法也有缺陷,原因相同:目标是对象,而不是类。此外,当您向Obj-C对象发送消息时,由于语言的动态特性,您可以忽略对象的类别来执行此操作,因此也没有任何帮助。

您还可以从字符串中创建选择器,如:

SEL selector = NSSelectorFromString(@"myMethod:");

compareWithUnit
LogUnit
中的一个静态函数吗?不,但我可以将其设置为静态函数,这会有什么好处?如果它是一个静态函数,我想您可以测试以下内容:
sortedArray=[使用选择器查看sortedArray:@selector([LogUnit compareWithUnit])1)视图是UIView/NSView对象的数组(哪一个)?2) LogUnit从哪个类继承?为什么要使用不同类中的方法对视图进行排序?我猜
compareWithUnit:
方法将
LogUnit
接收器与另一个
LogUnit
对象进行比较。这样一个方法如何处理另一个类的实例?问题不是创建选择器。问题是关于使用选择器对对象进行排序。我只是想帮助angryface先生
SEL selector = NSSelectorFromString(@"myMethod:");