iphone - 如何在 objective-c 中创建自定义异常?

标签 iphone objective-c ios macos

我正在尝试在 objective-c 中实现类似的目标。

@try{
//some code that will raise exception
}
@catch(CustomException e){//How to create this
//catching mechanism
}
@catch(NSException e){
//Generic catch
}

我需要创建 CustomException 类并使用它。你能帮我创建这个 CustomException 并指导我如何使用它吗?

提前致谢。

最佳答案

在 Objective-C 中,异常很少用于像这样的控制流。我猜您有 Java(或类似)背景。

我不是说你不能写这样的代码,但其他人看你的代码会感觉很奇怪,如果你不完全隔离代码,如果被其他人使用,也可能工作不好异常(exception),这样它就永远不会到达他们的代码。

在 Objective-C 中通常是如何完成的

异常用于严重错误。如果错误是预料之中的(就像它似乎是因为你想 @try 它)你应该尝试并返回一个 NSError。这是一种在整个 Foundation 和 Cocoa 框架以及第三方框架中使用的设计模式。例如网络、文件读取/写入或 JSON 代码 (JSONObjectWithData:options:error:)

你会做什么

您所做的是在可能会失败的方法末尾添加一个错误参数(双指针),如下所示:

- (MyResultObject *)myMethodThatCouldFailWith:(MyObject *)myObject
                                        error:(NSError **)error;

当某人(你或其他人)使用此方法时,他们可以传递一个 NSError 指针,如果发生错误,该指针将被设置,如下所示:

NSError *error = nil; // Assume no error
MyResultObject *result = [self myMethodThatCouldFailWith:myObject
                                                   error:&error];
if (!result) {
    // An error occurred, you can check the error object for more information.
}

注意错误参数前的符号 (&)。这意味着您将错误点作为参数发送,以便在有风险的方法内部可以将指针更改为指向新的 NSError 对象,该对象可以在方法返回后读取。

现在,在可能会失败的方法中,如果出现问题(而不是引发异常),您可以将错误设置为新的 NSError 对象。发生错误时返回 nil 也很常见,因为这可能意味着计算无法完成或者数据不可靠或不相关。

- (MyResultObject *)myMethodThatCouldFailWith:(MyObject *)myObject
                                        error:(NSError **)error {
    // Do something "risky" ...
    MyResultObject *result = [MyResultObject somethingRiskyWith:myObject];
    
    // Determine if things went wrong
    if (!result) {
        // Set error if a pointer for the error was given 
        if (error != NULL) {
            *error = [NSError errorWithDomain:yourErrorDomain
                                         code:yourErrorCode
                                     userInfo:optionalDictionaryOfExtraInfo];
        }
        return nil;
    }
    
    // Everything went fine.
    return result;
}

现在,如果错误返回,您可以从您指定的错误代码中识别错误类型,并且您可以在用户信息字典中阅读更多详细信息(您可以在其中添加大量信息)。

关于iphone - 如何在 objective-c 中创建自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11493173/

相关文章:

ios - Xcode 模拟器显示空白屏幕,直到退出调试器

iphone - iOS 中不同语言环境的货币格式化程序

ios - 谷歌地图标记图标为带边框的圆形图片

ios - 如何使用字符串创建类引用

iphone - 单击 UITableViewCell,UIWebView 无法加载网页

iphone - 什么是 __NSArrayI 和 __NSArrayM?如何转换为 NSArray?

objective-c - 子类化 UIPanGestureRecognizer 以在识别之前等待条件

objective-c - 何时保留 NSString?

ios - 为什么我会收到无法打开数据库文件的信息?

ios - Glossy iOS 不符合协议(protocol)