HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS 64bit @try {…} @catch {…}无效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常奇怪的问题.

最近我为我的iOS项目(arm64)添加了64位支持,从那以后,我开始在@try中找到我的代码段的未捕获异常… @ catch(我正在使用Crashlytics进行崩溃报告).我设法在我的应用程序的任何地方使用以下代码行重现问题(我在其中一个视图控制器的init中编写):

@try {
    NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
    NSString *s;
    m[s] = @"poop";
} @catch (NSException *E) {
    NSLog(@"POOP");
}

异常被UncaughtExceptionHandler而不是@catch子句捕获.我很困惑这会导致什么.控制台中的输出

2015-02-22 19:19:53.525 [391:30650] *** TerminaTing app due to uncaught exception 'NSInvalidArgumentexception',reason: '*** setObjectForKey: key cAnnot be nil'
*** First throw call stack:
(0x18823a59c 0x1989400e4 0x1881251f8 0x10011e2f4 0x10011e068 0x10010e480 0x10010db78 0x10010d944 0x1000a8050 0x100075d88 0x100075160 0x100142044 0x100141f6c 0x18c9ecaa0 0x18caa1fb4 0x18caa1eb0 0x18caa134c 0x18caa0ff8 0x18caa0d18 0x18caa0c98 0x18c9e9648 0x18c341994 0x18c33c564 0x18c33c408 0x18c33bc08 0x18c33b98c 0x18cc76dbc 0x18cc77c68 0x18cc75dec 0x1904b162c 0x1881f2a28 0x1881f1b30 0x1881efd30 0x18811d0a4 0x18ca573c8 0x18ca523c0 0x1000747d8 0x198faea08)
libc++abi.dylib: terminaTing with uncaught exception of type NSException

我尝试删除我拥有的自定义异常处理程序并禁用Crashlytics,仍然没有成功.

一旦我从ARCHS和VALID_ARCHS中删除arm64,代码就会正常工作,异常会按预期捕获.

任何信息将不胜感激!

小更新 – 我们的XCTests也开始不捕获异常,直到现在这种行为只发生在物理64位手机上.

解决方法

经过长时间的git-bisecting之后,罪魁祸首是以下链接器标志

-no_compact_unwind

我使用了BlocksKit v2.2.0仍然有那个标志,即使它停止使用libffi(最新版本的BlocksKit删除了那个不需要的标志).一旦我删除了那个链接标志64bit @try … @ catch blocks再次开始工作.

我仍然没有完全理解为什么会发生这种行为,但是如果我发现任何有趣的东西,我会更多地挖掘并更新这个线程.

表示不快

@H_874_42@

大佬总结

以上是大佬教程为你收集整理的iOS 64bit @try {…} @catch {…}无效全部内容,希望文章能够帮你解决iOS 64bit @try {…} @catch {…}无效所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。