打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(一现象)
一、现象:
iPhone真机打开Voice Over的情况下,iPhone QQ空间工程,Xcode 真机编译启动必Crash,main函数里面 NSSetUncaughtExceptionHandler 捕获到Exception:
捕获异常函数:
static void UncaughtExceptionHandler(NSException* exp) { QZLOG_ERROR(@"QZone UncaughtExceptionHandler Exception:%@, callStackSymbols:%@", exp, [exp callStackSymbols]); ... } int main(int argc, char *argv[]) { NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler); ... }
Crash时捕获到的异常及堆栈:
幸运的是,找到一个机器,打开Voice Over时运行启动Qzone时,必Crash。拿到真机的Devices Log,log里面的Crash堆栈:
__NSCFString 是NSString的私有类,由 “-[__NSCFString attributesAtIndex:effectiveRange:]: unrecognized selector sent to instance 0x219f625” 可知,开启voice over时,系统向一个NSString发送了一个NSAttributedString方法:attributesAtIndex:effectiveRange:,导致找不到该selector而crash。
因为在自已的机器上是必现的,所以很容易想到在Xcode里的breakpoint navigator里面 add exception breakpoint:
竟然发现没法捕获到,猜测可能是,开启voice over时,和voice over相关的一些设定,比如设置 NSObject (UIAccessibility) 这个 Category里面的一堆property时,到系统真正调用 attributesAtIndex:effectiveRange: 时的调用路经已经很遥远了。只是猜测,平时也经常会遇到Xcode没法捕获到exception的情况,各位看官谁有这方面的研究,期待不吝赐教,感激不尽。这下没办法了,只能再想想其它法子。看后续篇幅的解决思路及解决方案。
打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(一现象)的更多相关文章
- 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路3)
续前一篇:打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(二解决思路2)ok,到这里已经能够锁定范围了, ...
- artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error
我们首先看下面的代码 data = { "siteName" : "西部云谷二期17", "PM10" : "10017" ...
- Javascript中String对象的的简单学习
第十一课String对象介绍1:属性 在javascript中可以用单引号,或者双引号括起来的一个字符当作 一个字符对象的实例,所以可以在某个字符串后再加上.去调用String 对象 ...
- Java String对象的经典问题(转)
public class StringTest { public static void main(String[] args) { String strA = "abc"; St ...
- JavaScript中String对象的方法介绍
1.字符方法 1.1 charAt() 方法,返回字符串中指定位置的字符. var question = "Do you like JavaScript?"; alert(ques ...
- java 创建string对象机制 字符串缓冲池 字符串拼接机制
对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...
- 原生JS:String对象详解
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- js String对象中常用方法小结(字符串操作)
1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...
- 关于String对象的比较
1.String对象的比较 String 是一个常量,从String类中的代码可以看出.String类内部是通过char数组来存储字符串,这个char数组是被声明成final的. // Java中只要 ...
随机推荐
- codevs 3061 质子撞击炮②
提交地址:http://codevs.cn/problem/3016/ 3016 质子撞击炮 II 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描 ...
- [HNOI 2015]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- ●BOZJ 3144 [Hnoi2013]切糕
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3144 题解: "这是一个经典的最小割模型" ---引用自别人的博客 .. ...
- 计蒜客NOIP2017提高组模拟赛(三)day1
火山喷发 火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 n 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 MM 轮 ...
- poj 2417 && poj3243(Baby-Step Giant-Step)
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4624 Accepted: 2113 ...
- bzoj3930[CQOI2015]选数 容斥原理
3930: [CQOI2015]选数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1383 Solved: 669[Submit][Status] ...
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- HttpClient 实现 get,post请求
private String sendPost(Map<String,Object> data, String url) { CloseableHttpClient httpClient ...
- Linux查看CPU、内存、进程使用情况(转)
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- Cisco 的基本配置实例之四----vlan的规划及配置(接入交换机)
4.2 接入交换机的相关配置 ## 在此例中,我们联入的是一台接入交换机,此交换机的gi0/1口上联至核心交换机.也就意味着我们需要配置gi0/1为trunk口.具体的配置如下: D-2960-3(c ...