Try-Catch Error Objective C



我正试图从给定的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
}

这并不能很好地使用异常和try-catch-finally块。你说如果标题是nil,你就会得到异常。那么,为了优雅地处理这种情况,你到底希望你的应用程序做什么?根本不显示对话框?然后你可以做一些类似的事情:

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方法的标准编程检查。

相关内容

  • 没有找到相关文章

最新更新