A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔维友 中级黑马   /  2014-5-5 13:38  /  1509 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 崔维友 于 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命令执行却无误:




请大家指教


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 兰闻天 于 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. }
复制代码
这个就都可以的





评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
兰闻天 发表于 2014-5-5 14:03
综合来说,是方法名 test 的问题,改一下方法名吧,可能是内置的方法中有叫test的方法名,起方法名的时候不 ...

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

这个就真不知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马