将目标添加到选择器

时间:2013-01-07 12:39:15

标签: objective-c

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

    sortedArray = [views sortedArrayUsingSelector:@selector(compareWithUnit:)];

问题是我的compareWithUnit函数在LogUnit类中。我该如何告诉编译器在LogUnit类中寻找选择器?

views数组仅包含LogUnit(UIViewControllers)对象,我想按views结果对[LogUnit dayTime]数组进行排序。

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

2 个答案:

答案 0 :(得分:2)

来自NSArray Reference

  - (NSArray *)sortedArrayUsingSelector:(SEL)comparator
     

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

因此,comparator应该是组成数组的对象的方法。排序时,数组中的每个对象都将发送该消息。

如果您的views数组包含LogUnit个对象,并且LogUnit定义了compareWithUnit:方法,那么它将起作用。否则,你会崩溃。

无法更改此行为,因为它在NSArray中已经过硬编码。

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

将类规范添加到选择器的想法也存在缺陷,原因相同:目标是对象,而不是类。此外,当您向Obj-C对象发送消息时,由于语言的动态特性,您可以忽略对象的类,因此它也无济于事。

答案 1 :(得分:-1)

您还可以通过以下字符串创建选择器:

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