zoukankan      html  css  js  c++  java
  • MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决了

    最近的工作需要project打包成一个静态库文件,然后给他人使用提供。

    在project有提及第三方库MBProgressHUD。在打包出静态库文件后,写了个Demo,引用了当中的一段代码来显示MBProgressHUD。在iOS 7模拟器中无错执行。

    来到真机測试。在iOS 7的设备上无压力通过。可是在iOS 6的设备上显示MBProgressHUD时却崩溃了。错误提示为:

    -[__NSCFString sizeWithAttributes:]: unrecognized selector sent to XXXXXX

    因为我的机子上没有iOS 6的模拟器。所以仅仅能借别人的iPhone 4/4S来測试,系统是iOS 6,结果就出现了以上问题。

    因此,在这里奉劝大家一定要真机測试(模拟器往往是信只是的),并且一定要多种设备多个版本号測试,由于有一些开源类库是不支持低版本号的,或者你自己在使用过程中没有注意到版本号上的禁忌等。


    可是非常奇怪的是。我在打包前创建静态库文件的project中的測试是没问题的。

    出现了这种问题,第一时间谷歌了。结果看到CocoaChina中也有人遇到过这类问题,还问是不是MBProgressHUD自己的Bug。抱着怀疑的态度,我还是从自己的project出发来思考。

    我直接在project中搜sizeWithAttributes。结果在MBProgressHUD.h中看到了:

    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
    	#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero;
    #else
    	#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero;
    #endif

    如今问题突然明朗了,由于在iOS 6的设备上调用了iOS 7的API,所以导致了崩溃,也就是上面的“unrecognized selector sent to XXXXXX”。可是,我在Demo中Log出来的__IPHONE_OS_VERSION_MIN_REQUIRED的确是60000。也就是iOS 6,疑惑了。。

    后来想一想,唯一的解释是。静态库文件在打包时,里面的宏的值就固定了下来。也就是上面的MB_TEXTSIZE相应的就是sizeWithAttributes的方法,即iOS 7的API。所以即使Demoproject中的__IPHONE_OS_VERSION_MIN_REQUIRED = 60000也改变不了什么了。

    之后问了下老大。果然静态库在编译时里面的宏的值都固定下来了,因此Demoproject中调用的是iOS 7的API,在iOS 6的真机上跑当然崩溃了。瞬间豁然开朗。。。


    解决的方法:

    设置生成静态库project中的Deployment Target为iOS 6,注意,设置的Target不是project本身,而是Library自己(有一个小房子的图标):

    注意编译出来的API是iOS 6的API。因此iOS 6/7的设备都能够正常跑了,也就攻克了上面的问题。



    总结:

    1.一定要真机測试,并且要多种设备(iPhone 4/4S/5/5S)多种系统版本号(iOS 6/7)測试。

    2.有时候别人给出来的答案不一定是对的,一定要从自己所处的环境出发思考问题。



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4671220.html
Copyright © 2011-2022 走看看