最近的工作需要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 ...
随机推荐
-
Entity FrameWork 增删查改
Add #region 1.0 新增+void Add() /// <summary> /// 新增 /// </summary> static void Add() { // ...
-
SKD
1, 软件开发工具包 软件开发工具包(Software Development Kit,即SDK)一般是一些被软件工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件的开发工具的集合. ...
-
struts2框架基本操作总结
struts技术说明 一:第一配置开发环境 1.struts.xml文件 <?xml version="1.0" encoding="UTF-8" ?&g ...
-
Binary Tree Paths 解答
Question Given a binary tree, return all root-to-leaf paths. For example, given the following binary ...
-
Left/Right/Inner Join用法和区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
-
java web response提供文件下载功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
-
Python字符串全解
1.字符串大小写转换 def strChange(): str = "niuXinLong@163.com" print("原字符串:" + str) prin ...
-
Harmonic Value Description HDU - 5916
The harmonic value of the permutation p1,p2,⋯pn is ∑i=1n−1gcd(pi.pi+1) Mr. Frog is wondering about t ...
-
使用CocoaPods来做iOS程序的包依赖管理
前言 每种语言发展到一个阶段,就会出现相应的依赖管理工具, 或者是*代码仓库.比如 Java: maven,Ivy Ruby: gems Python: pip, easy_install Node ...
-
MySQL 存储过程,游标,临时表创建
-- -------------------------------------------------------------------------------- -- Routine DDL - ...