黑马程序员技术交流社区

标题: XCode5.1中关于SEL代码的异常 [打印本页]

作者: 崔维友    时间: 2014-5-5 13:38
标题: XCode5.1中关于SEL代码的异常
本帖最后由 崔维友 于 2014-5-5 14:45 编辑

代码:
  1. #import <Foundation/Foundation.h>

  2. @interface Persion : NSObject
  3.     - (void) test;
  4. @end

  5. @implementation Persion
  6.     - (void) test{
  7.         NSLog(@"还是SEL牛逼");
  8.     }
  9. @end

  10. int main(){
  11.     Persion * p = [[Persion alloc] init];

  12.     [p performSelector:@selector(test)];
  13.    
  14.     return 0;
  15. }
复制代码

在XCode5.1中会报错:multiple methods named "xxx" found with mismatched result. parameter type or attributes
这个错误一般出现在使用SEL调用有重名的方法,而本例只有一个“test”,如果改名为“test1、test2、...”则错误消失





而在终端使用cc命令执行却无误:




请大家指教



作者: 兰闻天    时间: 2014-5-5 14:03
本帖最后由 兰闻天 于 2014-5-5 14:05 编辑
  1. #import <Foundation/Foundation.h>

  2. @interface Persion : NSObject
  3. - (void)test;
  4. @end

  5. @implementation Persion
  6. - (void)test {
  7.     NSLog(@"还是SEL牛逼");
  8. }
  9. @end

  10. int main(){
  11.     Persion * p = [[Persion alloc] init];
  12.     // p.test;
  13.     SEL s = @selector(test);
  14.     [p performSelector:s]; // 这样写就没事
  15.    
  16.     [p performSelector:@selector(test)];
  17. // 这样写就错误
  18.    
  19.     return 0;
  20. }
复制代码
综合来说,是方法名 test 的问题,改一下方法名吧,可能是内置的方法中有叫test的方法名,起方法名的时候不要起非常常用的名字做方法名。下面是我把test换成test1的
  1. #import <Foundation/Foundation.h>

  2. @interface Persion : NSObject
  3. - (void)test1;
  4. @end

  5. @implementation Persion
  6. - (void)test1 {
  7.     NSLog(@"还是SEL牛逼");
  8. }
  9. @end

  10. int main(){
  11.     Persion * p = [[Persion alloc] init];
  12.     // p.test;
  13.     SEL s = @selector(test1);
  14.     [p performSelector:s];
  15.    
  16.     [p performSelector:@selector(test1)];
  17.    
  18.     return 0;
  19. }
复制代码
这个就都可以的






作者: 崔维友    时间: 2014-5-5 14:20
兰闻天 发表于 2014-5-5 14:03
综合来说,是方法名 test 的问题,改一下方法名吧,可能是内置的方法中有叫test的方法名,起方法名的时候不 ...

是这样。测试时如果没有声明实现test这个方法名而使用prefromselector调用,XCode无错,但运行时也会出错。
另外我的代码在终端是没问题的,所以一定没有这个内置方法。也许是XCode的bug。
作者: 兰闻天    时间: 2014-5-5 15:07
崔维友 发表于 2014-5-5 14:20
是这样。测试时如果没有声明实现test这个方法名而使用prefromselector调用,XCode无错,但运行时也会出错 ...

这个就真不知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2