您的位置:首页 > 其它

异样的unrecognized selector sent to instance

2015-12-29 13:46 169 查看
Reachability的源代码,在一个静态库中定义,调用的地方在IOS App工程中

Reachability *reach = [[[Reachability alloc] init] autorelease];
reach.key = @"";


xcode调试报错,-[Reachability setKey:]: unrecognized selector sent to instance 0x7fdf949a2cc0

查看Reachability的源代码,确实定义了这个方法

@interface Reachability: NSObject {

@private
NSString                *key_;
SCNetworkReachabilityRef reachabilityRef;

}

@property (copy) NSString *key; // Atomic because network operations are asynchronous.
......


在reach.key=@""这行代码打个断点,重新运行查看运行时Reachability的属性



红框中的属性在我使用的Reachability源代码中翻遍了也没有找到,所以我怀疑是xcode的链接出错了。

用nm命令查看Reachability的静态库的符号表,和ios APP的符号表(左侧是静态库的符号表,右侧是App的符号表)



对比后,果然是xcode 在链接生成App时出错了。

于是用nm命令遍历App工程中引用(直接或者间接引用)的第三方库文件,终于在一个名叫libucs.a的文件中找到了另一份Reachability定义



问题原因查到了,解决方法就是修改自己的Reachability的源代码,就是将Reachability类改名。

吐槽下坑爹的xcode,竟然没有报出duplicate symbol错误,竟然让我顺利的生成了App。

总结就是Objective-C语言,既然没有命名空间,那么写代码时强烈建议加前缀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: