转自:http://blog.itpub.net/12231606/viewspace-1081952/

今天将app统计的.a静态库包含到一个app应用中,调试时报下面的错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSDictionary dictionaryWithJSONString:error:]: unrecognized selector sent to class 0x235e7ec'

unrecognized selector sent to class 0x235e7ec'

*** First throw call stack:

(

0   CoreFoundation                      0x022195e4 __exceptionPreprocess + 180

1   libobjc.A.dylib                     0x01f288b6 objc_exception_throw + 44

2   CoreFoundation                      0x022b67a3 +[NSObject(NSObject) doesNotRecognizeSelector:] + 275

3   CoreFoundation                      0x0220990b ___forwarding___ + 1019

4   CoreFoundation                      0x022094ee _CF_forwarding_prep_0 + 14

...

10  Foundation                          0x01b80597 -[NSThread main] + 76

11  Foundation                          0x01b804f6 __NSThread__main__ + 1275

12  libsystem_c.dylib                   0x02d625b7 _pthread_start + 344

13  libsystem_c.dylib                   0x02d4cdce thread_start + 34

)

libc++abi.dylib: terminating with uncaught exception of type NSException


纠结了好久,定位代码错误位置如下:

  1. NSString *retString = [network SendData:url data:requestDictionary];
  2. NSError *error = nil;
  3. NSDictionary *retDictionary = [ NSDictionary dictionaryWithJSONString:retString error:&error];
  4. if(!error)
  5. {
  6. ret.flag = [[retDictionary objectForKey:@\"flag\" ] intValue];
  7. ret.msg = [retDictionary objectForKey:@\"msg\"];
  8. }
  9. return ret;
  10. }

推断原因是:NSDictionary 是内嵌对象,但是dictionaryWithJSONString  另一个自定义对象的方法。为什么要用与NSDictionary  相同的名称,原因就是要返回NSDictionary 对象。

自定义对象代码如下:

  1. @implementation NSDictionary (NSDictionary_JSONExtensions)
  2. + (id)dictionaryWithJSONData:(NSData *)inData error:(NSError **)outError
  3. {
  4. return([[CJSONDeserializer deserializer] deserialize:inData error:outError]);
  5. }
  6. + (id)dictionaryWithJSONString:(NSString *)inJSON error:(NSError **)outError;
  7. {
  8. NSData *theData = [inJSON dataUsingEncoding:NSUTF8StringEncoding];
  9. return([self dictionaryWithJSONData:theData error:outError]);
  10. }
  11. @end

所以,推断xcode没有正确解析代码,把dictionaryWithJSONString 方法错误认为是内嵌对象NSDictionary 的内部方法,但NSDictionary 没有这个方法,所以调试的时候,就找不到该方法的实现,报出错误信息:unrecognized selector sent to class 0x235e7ec'

推断出问题的可能原因后,很有可能是工程的setting信息有问题。于是开始一个一个参数过,一开始以为是Search Paths的各种路径配置错误,后来验证不是。否则编译都应该过不去。
于是,将范围定在Build Settings下的Linking的参数列表。马上有一个参数映入眼帘:Other Linker Flags,没有设置。通过google,查询相关说明:

-all_load Loads all members of static archive libraries.

-ObjC Loads all members of static archive libraries that implement an Objective-C class or category.

-force_load (path_to_archive) Loads all members of the specified static archive library. Note: -all_load forces all members of all archives to be loaded. This option allows you to target a specific archive.

翻译过来就是-all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用

到这里,基本就明白了,就是这个参数没有设置的原因。将Other Linker Flags=-ObjC,再重新调试,运行成功!!

(转)ios error:unrecognized selector sent to class的更多相关文章

  1. iOS - error:unrecognized selector sent to class 导入第三方SDK .a后不识别,运行崩溃

    今天将app统计的.a静态库包含到一个app应用中,调试时报下面的错误: *** Terminating app due to uncaught exception 'NSInvalidArgumen ...

  2. Solve Error: 'NSInvalidArgumentException', reason: '-[UITableView mas_makeConstraints:]: unrecognized selector sent to instance 0x7fa5c402fa00'

    下面是iOS开发用第三方库可能出现的错误,及其解决方法: 1. 'NSInvalidArgumentException', reason: '-[UITableView mas_makeConstra ...

  3. IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance

    那在什么场景中会出现这种情况呢? 如果一个包含文字的输入元素有焦点,然后按钮的点击会导致输入失去焦点,然后接下来在输入时双按会重新得到焦点并从弹出bar中选择剪切复制粘贴,就会导致此error. 也就 ...

  4. IOS微信API异常:unrecognized selector sent to instance 0x17005c9b0'

    开发IOS整合微信API的时候,在运行程序的过程中可能会在注册你的APPID的时候抛出此异常而导致程序崩溃. 异常描述 [7661:2826851] *** Terminating app due t ...

  5. iOS 程序报错:reason: [NSArrayI addObject:]: unrecognized selector sent to instance

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI ad ...

  6. ios unrecognized selector sent to instance出现的原因和解决方案

    概述:造成unrecognized selector sent to instance iphone,大部分情况下是因为对象被提前release了,在你心里不希望他release的情况下,指针还在,对 ...

  7. iOS开发——异常:[__NSCFNumber length]: unrecognized selector sent to instance

      *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumbe ...

  8. iOS [AFHTTPSessionManager GET:parameters:progress:success:failure:]: unrecognized selector sent to

    AFN更新到4.0.1后,崩溃[AFHTTPSessionManager GET:parameters:progress:success:failure:]: unrecognized selecto ...

  9. '-[__NSCFString stringFromMD5]: unrecognized selector sent to instance 0x14d89a50'

    类型:ios 问题描述: 导入百度地图 然后在模拟器运行可以,真机测试不行: 报错: '-[__NSCFString stringFromMD5]: unrecognized selector sen ...

随机推荐

  1. redis rdb aof比较

    Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...

  2. loadrunner socket协议问题归纳(5)

    获取服务器的返回值,可以用web_reg_save_param函数,该参数最好放到: 语法: int web_reg_save_param(const char *ParamName, <lis ...

  3. GCD最大公约数

    说明: 最初跟鹏哥学习最大公约数的算法是辗转相除,确实印象很深刻,那种辗转赋值的思想在好多题目中都有运用,但随着进一步学习,我也参考了其他几种方便快捷的最大公约数求法,在这里做一个总结. . int ...

  4. 王者荣耀交流协会final发布版本控制报告

    二次开发软件说明文档 Dec 6 纠正饼状图点击选择PSP文件无效. 添加饼状图丢失的代码. submit the files that last night I forgot. add shurum ...

  5. Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp

    题目链接: http://codeforces.com/problemset/problem/7/D D. Palindrome Degree time limit per test1 secondm ...

  6. Lucene 高级搜索

    自定义评分 public class MyScoreQuery { public void searchByScoreQuery(){ try { IndexSearcher searcher=new ...

  7. CCF——相邻数对201409-1

    问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好 ...

  8. Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/

    转自:http://blog.csdn.net/zzq123686/article/details/77454066 出现错误信息: Reading package lists... Done E:  ...

  9. HTML常用标签查询

    JAVA开发避免不了要接触前端,所以我不得不从0开始学习前端内容!下面分享我自己总结的HTML常用标签查询代码:将下面代码复制粘贴到文本文档,然后另存为html格式;通过file:///文档保存路径的 ...

  10. CentOS卸载系统自带的OpenJDK并安装Sun的JDK的方法

    查看目前系统的jdk: rpm -qa | grep jdk 得到的结果: [root@dc-01 java]#  rpm -qa | grep jdk java-1.6.0-openjdk-1.6. ...