3

我正在尝试从给定的 instagram 图片中获取标题,但是如果没有标题,则应用程序会引发异常并崩溃。我将如何实施@try@catch做到这一点。这是我到目前为止所拥有的:

@try {
    RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:[NSString stringWithFormat:@"%@",entry[@"user"][@"full_name"]] message:[NSString stringWithFormat:@"%@",text[@"caption"][@"text"]]];
    [modal show];
}
@catch (NSException *exception) {
    NSLog(@"Exception:%@",exception);
}
@finally {
  //Display Alternative
}
4

1 回答 1

6

这不是很好地使用异常和--try块。你说如果标题是. 那么,您究竟希望您的应用程序做什么才能优雅地处理这种情况?根本不显示对话框?然后你可能会做类似的事情:catchfinallynil

NSString *user = entry[@"user"][@"full_name"];
NSString *caption = text[@"caption"][@"text"];

if (caption != nil && caption != [NSNull null] && user != nil && user != [NSNull null]) {
    RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:user message:caption];
    [modal show];
}

或者,如果这些是,您可能想展示其他内容nil

NSString *user = entry[@"user"][@"full_name"];
NSString *caption = text[@"caption"][@"text"];

if (caption == nil || caption == [NSNull null])
    caption = @"";     // or you might have @"(no caption)" ... whatever you want
if (user == nil || user == [NSNull null])
    user = @"";

RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:user message:caption];
[modal show];

或者,如果您有 的源代码RNBlurModalView,也许您可​​以准确地诊断为什么它会在标题为 时生成异常nil,并在那里解决该问题。

有很多可能的方法,具体取决于您希望应用程序在这些情况下做什么,但异常处理无疑不是正确的方法。作为Objective-C 编程指南的处理错误部分,异常是针对意料之外的“程序员错误”,而不是简单的逻辑错误,正如他们所说:

您不应该使用 try-catch 块来代替 Objective-C 方法的标准编程检查。

于 2013-08-07T01:58:51.037 回答