我正试图从给定的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方法的标准编程检查。