我想知道如何将目标设置为我的选择器。我想打这个电话>>
sortedArray = [views sortedArrayUsingSelector:@selector(compareWithUnit:)];
问题是我的compareWithUnit
函数在LogUnit
类中。我该如何告诉编译器在LogUnit
类中寻找选择器?
views
数组仅包含LogUnit
(UIViewControllers)对象,我想按views
结果对[LogUnit dayTime]
数组进行排序。
- (NSComparisonResult) compareWithUnit:(LogUnit*) unit;
{
return [[self dayTime] compare:[unit dayTime]];
}
答案 0 :(得分:2)
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
比较器消息被发送到数组中的每个对象,并且作为其单个参数在数组中具有另一个对象。
因此,comparator
应该是组成数组的对象的方法。排序时,数组中的每个对象都将发送该消息。
如果您的views
数组包含LogUnit
个对象,并且LogUnit
定义了compareWithUnit:
方法,那么它将起作用。否则,你会崩溃。
无法更改此行为,因为它在NSArray
中已经过硬编码。
顺便说一句,没有办法将目标包含在选择器定义中,因为目标是一个对象(即运行时存在的实体),而选择器只是您发送给一个消息的名称。对象
将类规范添加到选择器的想法也存在缺陷,原因相同:目标是对象,而不是类。此外,当您向Obj-C对象发送消息时,由于语言的动态特性,您可以忽略对象的类,因此它也无济于事。
答案 1 :(得分:-1)
您还可以通过以下字符串创建选择器:
SEL selector = NSSelectorFromString(@"myMethod:");