Tag: exception处理

iOS – 全局exception处理程序

有没有办法为iPhone应用程序实现全局exception处理程序,这样,exception而不是静默地崩溃应用程序,可以允许某种消息? 我可以理解,如果它不是可行的,因为程序可能处于不一致的状态,但至less告诉用户“很抱歉 – 出错了! 谢谢!

整个应用程序中的exception处理

我对iPhone中的exception处理有一些怀疑。 他们是: 假设我有一个接一个被调用的方法链,也就是方法A调用方法B,方法B又调用方法C,调用方法D.哪一个放置我的try-catch块是最好的地方是方法A还是B还是C或D还是全部)。 此外,我需要显示一个警告给用户,发生exception,然后,我想logging这个exception到我的服务器。 所以,如果我在所有这些方法中写入try-catch块,并且在方法D中发生exception, 那么我认为这个alert会显示4次,logging的web服务也会被调用4次(直到控件到达方法A的catch块)。 所以,我应该只使用@throw; 在方法B,C和D的catch块中,在方法A的catch块中写入我的逻辑(顶层方法),还是应该避免在方法B,C和D中写入try-catch。 我需要一些来自exception的错误代码(因为我的Web服务需要参数错误代码和描述)。 是否有可能将exception转换为错误,或者是否需要对此代码进行硬编码? 我曾经读过关于NSSetUncaughtExceptionHandler的地方。 我认为,如果我可以设置此处理程序(在应用程序委托的appDidFinishLaunching方法中)和处理程序方法中,如果我向用户显示一些警报并调用Web服务; 那么我不需要在每个类的每个方法中都写try – catch块。 我对吗?? 如果发生exception,而且我写了try-catch块或NSSetUncaughtExceptionHandler,那么我的应用程序将继续运行,否则它将不会响应任何用户事件。 (我相信它会处理崩溃,我想知道的是它是否会挂起) 有人请赐教我这个例外的主题。

Monotouch全局例外处理

我正在野外出现一个令人讨厌的虫子,我不能把手指放在上面。 有没有办法有一个全球尝试/捕捉块,或者一种方式来处理任何exception,MonoTouch中无人。 我可以只包装UIApplication.Main(args)在尝试捕获? 在捕获exception之后,我想显示一个UIAlertView来显示结果。 任何帮助?

NSRangeException:调用堆栈不显示行号

我得到以下索引越界错误: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' *** First throw call stack: (0x2263052 0x24c7d0a 0x224fdb8 0x2f4a7 0x2264ec9 0x81e299 0x81e306 0x75aa30 0x75ac56 0x741384 0x734aa9 0x39a9fa9 0x22371c5 0x219c022 0x219a90a 0x2199db4 0x2199ccb 0x39a8879 0x39a893e 0x732a9b 0x1e5b 0x1dc5 0x1) 我确切地知道这个错误是什么意思,但是我发现这些错误很难修复,因为由于某种原因,调用堆栈并没有告诉我数组被调用的那一行代码。 这是来自线程1的调用堆栈: #0 0x9706d9c6 in __pthread_kill () […]

我怎样才能解决NSInvalidUnarchiveOperationException

*由于未捕获exception'NSInvalidUnarchiveOperationException',原因:'* – [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(NSLayoutConstraint)“ 我有一个非常简单的应用程序 一个视图有一个button 我控制单击并将button拖到第二个视图,并selectMODAL 当我在模拟器中运行它时,一切正常 当我在运行iOS 5.1.1的iPad中运行它时,它会崩溃,出现上述错误。 我不知道为什么,也没有代码。

如何从obj-c / ios的堆栈跟踪中获取源代码行

我使用NSSetUncaughtExceptionHandler将堆栈跟踪信息打印到iPhone中的本地文件中,该文件将在下次启动时发送到我们的服务器。 然后我可以检查exception数据并修复这个错误。 在一些崩溃中,我有模块名称和抛出exception的函数,这些很容易。 但主要是我有这样的事情: "4 libc++abi.dylib 0x35bba3c5 _ZL19safe_handler_callerPFvvE + 76", "5 libc++abi.dylib 0x35bba451 _ZdlPv + 0", "6 libc++abi.dylib 0x35bbb825 __cxa_current_exception_type + 0", "7 libobjc.A.dylib 0x37bab2a9 objc_exception_rethrow + 12", "8 CoreFoundation 0x3575a50d CFRunLoopRunSpecific + 404" 例如原因: *** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array 但我的应用程序中有数十个数组,所以我需要帮助来查找抛出exception的特定行,使用从堆栈跟踪中获得的数据。 有没有人知道从苹果或其他的一个很好的文章/教程,在那里我可以学习解码堆栈跟踪中的数字,以find源代码中有问题的行。 提前致谢!

“只在主线程上运行”的exception只是模拟器

我得到一个“只在主线程运行”exception深处内部(或之后) [self.navigationController pushViewController:controller animated:YES]; 事情是只发生在模拟器上,而不是在IOS设备中进行debugging。 任何机会我可以解决这个问题? 转储: 2014-03-25 15:18:45.061 Cookila[657:5507] *** Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView<NSTextContainerView> *, NSTextContainer *, NSUInteger)(), /SourceCache/UIFoundation_Sim/UIFoundation-264.8/UIFoundation/TextSystem/NSLayoutManager_Private.m:1510 2014-03-25 15:18:45.086 Cookila[657:5507] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!' *** First throw call stack: ( 0 CoreFoundation 0x027251e4 __exceptionPreprocess + 180 1 libobjc.A.dylib […]

iOS CALayerInvalidGeometry

我有一个崩溃的应用程序,与此消息: 终止应用程序,由于未捕获exception“CALayerInvalidGeometry”,原因:“CALayer位置包含NaN:[2.74665e-34 nan]' 这里有一个更详细的例外信息: CALayer position contains NaN: [2.74665e-34 nan] 2012-04-05 15:48:00.185 Infectious[28198:fb03] ( 0 CoreFoundation 0x0226803e __exceptionPreprocess + 206 1 libobjc.A.dylib 0x02820cd6 objc_exception_throw + 44 2 CoreFoundation 0x02210a48 +[NSException raise:format:arguments:] + 136 3 CoreFoundation 0x022109b9 +[NSException raise:format:] + 57 4 QuartzCore 0x00df3c0d _ZN2CA5Layer12set_positionERKNS_4Vec2IdEEb + 155 5 QuartzCore 0x00de9f55 -[CALayer setPosition:] + 68 6 QuartzCore […]

在Swift 2中捕捉“IndexOutOfBoundsException”

我在游乐场里得到了这段代码: func throwsError() throws{ var x = [1,2] print(x[3]) } func start(){ do{ try throwsError() } catch let unknown{ "unknown: \(unknown)" } } start() 所以显然'throwsError函数会抛出一个错误: 执行中断,原因:EXC_BAD_INSTRUCTION 有没有办法来抓住这个? 我在线阅读,为Array类编写了一个下标,它总是检查范围,但问题是更大的:我不能够抓住任何东西吗?

如何捕捉Swift崩溃并做一些日志logging

在Objective-C中, NSSetUncaughtExceptionHandler可以注册一些function来对exception做最后一分钟的logging。 这没有抓到从Swift崩溃的东西。 是否有可能在Swift的全球层面上做这样的事情? 例如,如果在Swift代码中发生崩溃,请执行一些日志logging,就像强制解包nil可选。 具体来说,我正在做一个工具来logging应用程序中的networkingstream量,如果发生崩溃,我想将我的内存数据刷新到磁盘。