2013-08-07 33 views
3

我想从一个给定的Instagram图片标题,但如果没有字幕的应用程序将引发异常和崩溃。我将如何执行@try@catch来执行此操作。以下是我迄今为止:的try-catch错误目标C

@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 
} 
+0

你有没有在你的NSLog声明试图[异常原因],而不是仅仅例外。 – asafreedman

+0

我真的不知道如何能告诉我如何? – Prad

+4

我认为你也抛出异常? Objective-C中不鼓励使用这种常见情况的例外情况。例外情况是......以及程序无法恢复的特殊情况。相反,为什么不使用'NSError'对象,并在没有标题的情况下通知用户。 – borrrden

回答

5

这不是一个很好的异常的使用和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的指南的Dealing With Errors部分,异常用于未预料到的“程序员的错误”,而不是简单的逻辑错误,因为他们说:

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

+0

它没有在这里工作是什么来'的libC++ abi.dylib:终止叫做抛出exception' – Prad

+0

'2013年8月6日23:52:32.878 Floadt [2589:C07] - [NSNull objectForKeyedSubscript:]:无法识别的选择发送到实例0x3102678 2013年8月6日23:52:32.880 Floadt [2589:C07] ***终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因: ' - [NSNull objectForKeyedSubscript:]:无法识别的选择发送到实例0x3102678' libC++ abi.dylib:终止调用抛出异常# – Prad

+0

@ prnk28你的错误是告诉你该对象是'[NSNull null]'。因此,只需添加检查。看修改后的答案。我假设错误来自标题是'[NSNull null]',所以这个编辑应该这样做。如果不是,你必须确定哪个对象被设置为'[NSNull null]'。 – Rob