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.有时候别人给出来的答案不一定是对的,一定要从自己所处的环境出发思考问题。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决了的更多相关文章
- '-[__NSCFString stringFromMD5]: unrecognized selector sent to instance 0x14d89a50'
类型:ios 问题描述: 导入百度地图 然后在模拟器运行可以,真机测试不行: 报错: '-[__NSCFString stringFromMD5]: unrecognized selector sen ...
- -[__NSCFString longValue]: unrecognized selector sent to instance
You can use NSString methods intValue longLongValue. 这个使用longvalue会crash报上面的错误
- [__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x17deba00
还真是一波未平一波又起,又出现了这个问题,详情如下: -[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized ...
- ios unrecognized selector sent to instance出现的原因和解决方案
概述:造成unrecognized selector sent to instance iphone,大部分情况下是因为对象被提前release了,在你心里不希望他release的情况下,指针还在,对 ...
- unrecognized selector sent to instance
今天长一见识(特此感谢小星星老湿-坏笑),凡是遇到“unrecognized selector sent to instance *******”的都是******方法没有,比如这种的错误: 可以尝试 ...
- IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance
那在什么场景中会出现这种情况呢? 如果一个包含文字的输入元素有焦点,然后按钮的点击会导致输入失去焦点,然后接下来在输入时双按会重新得到焦点并从弹出bar中选择剪切复制粘贴,就会导致此error. 也就 ...
- iOS 程序报错:reason: [NSArrayI addObject:]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI ad ...
- -[__NSCFNumber length]: unrecognized selector sent to instance 0xb0000000000000e3
网络数据解析出现-[__NSCFNumber length]: unrecognized selector sent to instance 0xb0000000000000e3这样的错误,具体 re ...
- CBUUID UUIDString unrecognized selector sent to instance 错误
CBUUID UUIDString unrecognized selector sent to instance 错误 ios7.0,4s 蓝牙出现上述错误! 查看api可知,错误原因,由于CBUUI ...
随机推荐
- BZOJ 3236 AHOI 2013 作业 莫队算法
题目大意:给出一些数,问在一个区间中不同的数值有多少种,和在一个区间中不同的数值有多少个. 思路:因为没有改动,所以就想到了莫队算法.然后我写了5K+的曼哈顿距离最小生成树,然后果断T了.(100s的 ...
- Hadoop之—— CentOS Warning: $HADOOP_HOME is deprecated解
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46389499 启动Hadoop时报了一个警告信息.我安装的Hadoop版本号是ha ...
- AndroidUI的组成部分ProgressBar
package com.gc.progressbar; /* * 1.ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件, * 它还派生了两个经常使用的组件:Se ...
- 【java基础】==与equals()方法比较
1.八种基本类型 只有"=="方法进行判断是否相等,比较的是基本数据类型的值,没有equals()方法 2.Java类库中的类 "=="比较的是对象的句柄,即内 ...
- 玩转Web之JavaScript(三)-----javaScript语法总结(三) 窗口/滚动条/文本的相关语法
JS语法集锦(三) 窗口/滚动条/文本 alert("文本") 警告框:警告框经常用于确保用户可以得到某些信息,当警告框出现后,用户需要点击确定按钮才能继续进行操作. con ...
- github jekyll site不再使用Maruku由于Markdown翻译员,但kramdown
今天写了一篇博客,之push至jekyll site on github在,发现总是错的,例如,下面的电子邮件消息: The page build completed successfully, bu ...
- UVA 11464 Even Parity(递归枚举)
11464 - Even Parity Time limit: 3.000 seconds We have a grid of size N x N. Each cell of the grid in ...
- [WebGL入门]四,渲染准备
注意:文章翻译http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:].另外.鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家 ...
- mousewheel 与 DOMMouseScroll
FF使用DOMMouseScroll,其他浏览器使用mousewheel FF在一个特殊的属性event.detail.表示滚动的值 event.detail 正数:向下滚动,负数:向上滚动 滚动一次 ...
- Team Foundation Server 2015使用教程--团队项目创建