0

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

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

问题是我的compareWithUnit功能在LogUnit课堂上。我应该如何告诉编译器在类中寻找选择器LogUnit

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

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

2 回答 2

2

来自NSArray 参考

  - (NSArray *)sortedArrayUsingSelector:(SEL)comparator

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

因此,comparator预计将成为构成数组的对象的方法。排序时,数组中的每个对象都将收到该消息。

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

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

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

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

于 2013-01-07T12:49:36.073 回答
-1

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

SEL selector = NSSelectorFromString(@"myMethod:");
于 2013-01-07T12:51:01.783 回答