objective-c - 处理 UITableView 或 NSArray 异常?

标签 objective-c ios cocoa exception

我正在尝试更多地了解异常。我在我的 AppDelegate 中安装了一个未捕获的异常处理程序:

// in applicationDidFinishLaunching:
NSSetUncaughtExceptionHandler(&HandleExceptions);
...
void HandleExceptions(NSException *exception) {
    // Save application data on crash
    [appDelegate saveData];
}

所以我不完全确定这是如何工作的。假设我越界访问一个数组,这会引发异常。为什么不调用此方法?或者说在从表中插入或删除行后抛出断言异常 - 在这些情况下,我如何在应用程序崩溃之前保存数据?

一般来说,当系统抛出异常时,我如何才能有机会在应用程序崩溃之前保存数据?或者它不是那样工作的?未捕获的异常处理程序是否仅适用于我抛出的未包含在 @catch 或 @try 中的异常?

最佳答案

当调用您的方法时,“appDelegate”可能为 nil。我刚刚将其添加到 viewController 中:

void HandleExceptions(NSException *exception) {
    // Save application data on crash
    NSLog(@"YIKES");
}

然后这样做:

NSArray *foo = @[ @1, @2, @3 ];
NSSetUncaughtExceptionHandler(&HandleExceptions);
NSLog(@"%@", [foo objectAtIndex:3]);

得到这个:

2012-09-06 13:51:17.474 Searcher[64798:f803] YIKES
2012-09-06 13:51:17.475 Searcher[64798:f803] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
*** First throw call stack:
(0x67f022 0x1749cd6 0x66b644 0x324d 0xbb8a1e 0xb17401 0xb17670 0xb17836 0xc9addd8 0xb1e72a 0x2fcd 0xaef386 0xaf0274 0xaff183 0xaffc38 0xaf3634 0x2260ef5 0x653195 0x5b7ff2 0x5b68da 0x5b5d84 0x5b5c9b 0xaefc65 0xaf1626 0x2dfc 0x2d95

关于objective-c - 处理 UITableView 或 NSArray 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302943/

相关文章:

ios - 我的自定义单元格的标签大小不会改变,即使是硬编码值也是如此。什么可以阻止这种情况?

ios - Objective-C 修改类实例父类(super class)

iphone - 将电源按钮添加到计算器应用程序

ios - 根据键值之一删除 CNContact 数组

objective-c - cocoa /Objective-C : how much optimization should I do myself?

objective-c - performSelector 的返回值 :

objective-c - 使用具有一对多关系的 NSPredicate 获取父对象

objective-c - 如何通过 Objective-C 获取 iTunes 轨道的当前时间?

objective-c - 对于非 CF 类型,使用匹配的 CFBridging 调用来传入和传出 ARC 是否安全?

ios - 将表格 View 的底部锚定到容器 View 的顶部