当前位置:  开发笔记 > IOS > 正文

在iPhone上使用NSMethodSignature(具有Obj-C 2.0属性)

如何解决《在iPhone上使用NSMethodSignature(具有Obj-C2.0属性)》经验,为你挑选了1个好方法。

嘿伙计们,我在手机上运行以下代码,其中'object'是Cat,它是Animal的子类.动物有属性'颜色':

NSLog(@"Object: %@", object);
NSLog(@"Color: %@", [object color]);
NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:@selector(color)];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:object];

[invocation invoke];

我的控制台中的输出是:

2009-06-28 16:17:07.766 MyApplication[57869:20b] Object: 
2009-06-28 16:17:08.146 MyApplication[57869:20b] Color: 

然后,我收到以下错误:

*** -[Cat ]: unrecognized selector sent to instance 0xd3f370

有线索吗?我在其他类中使用这种类似的方法,但我无法弄清楚在这种情况下我做错了什么.选择器'颜色'显然存在,但我不知道它为什么没有被正确识别.



1> Mike Akers..:

尝试这样的事情:

NSLog(@"Object: %@", object);
NSLog(@"Color: %@", [object color]);

SEL sel = @selector(color);

NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:sel];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.selector = sel;
invocation.target = object;

[invocation invoke];

你缺少一个呼叫NSInvocationsetSelector:方法.

NSMethodSignature记录方法的参数和返回值的类型信息,但不包含选择器本身.因此,如果您想要使用它,NSInvocation您还需要设置调用的选择器.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有