我正在学习ios开发。
我写了一个例子,需要执行NSMutabArray的排序功能。
我定义了两个类。
AddressCard//纪录卡片名,地址
AddressBook//纪录地址簿书名,NSMutabArray类型的对象book
我调用
[self.book sortUsingSelector:@selector(compareNames:)];
我在AddressCard中有一个方法如下
-(NSComparisonResult) compareNames:(id)element
{
return [((AddressCard*)element).name compare:self.name];
}
于是,就实现了排序。这里还没有问题,呵呵。抱歉,引言长了一点。
问题来了
1.似乎我没有办法在任何地方,查到这个SEL参数,应该写怎样的一个方法,也就是我怎么通过一个SEL参数,知道去写一个返回NSComparison结果,参数是一个类型为id的变量的?如果靠猜,我也许猜测是
-(NSComparisonResult) compareNames:(id)element another:(id)element2
这个格式,怎么可以看出来呢?因为并非所有的方法调用都是系统的,如果说系统的可以在网上查资料有迹可循,那如果我有一天用别人的方法,参数是SEL,我如何知道如何写这个方法呢?
2.我自己也尝试的想使用写一个SEL做参数的方法,不过总是无法实现好。网上看了一些,不过似乎没有很吻合的例子。如果有人了解,请不吝赐教。谢谢!
下面是我自己写的一个测试例子,当然,执行总提示参数错误,能告知如何错误的更好啦。
@interface SelectorDemo : NSObject
-(void)InvokeSel:(SEL) select_test_method;
@end
@implementation SelectorDemo
-(void) InvokeSel:(SEL)select_test_method
{
if(select_test_method)
{
@try {
[self performSelector:select_test_method withObject:nil];
}
@catch (NSException *exception) {
printf("[Name]\n%s\n[Reson]\n%s\n\n",[exception.name UTF8String],[exception.reason UTF8String]);
}
}
}