打开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的情况,各位看官谁有这方面的研究,期待不吝赐教,感激不尽。这下没办法了,只能再想想其它法子。看后续篇幅的解决思路及解决方案。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值