2012-09-11 53 views
-1

我正在为新闻做一个iPhone应用程序。我通过ASIHTTPRequest获取新闻数据,并使用JSONKit进行解析。当连接到Internet它的正常工作,但是如果无线网络连接断开,我收到以下异常和应用程序崩溃:当没有互联网连接时应用程序崩溃

终止应用程序由于未捕获的异常 “NSInvalidArgumentException”的,理由是:“该jsonData说法是空值。'

这里是我的代码:

- (id)objectWithData: (NSData *)jsonData error: (NSError **)error 
{ 
    if(jsonData == NULL) 
    { 
     [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; 
    } 

    return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]); 
} 

谁能帮助我吗?

+3

我不明白..你手动提出这个异常,所以你期望什么?当然它会扔它。请从您的网络请求中发布您的退货。 – Martin

+0

我该如何处理这种情况 –

+0

那么,而不是抛出异常,你可能只显示一个Altert,通知用户他的操作需要一些互联网访问。然后你可以返回nil而不是一些json字节,并确保调用函数相应地处理nil值。 –

回答

-3

使用cmnd + shift + F查找您使用非法参数的地方,如果请求失败,您通常不应该到达那个地方。

看起来好像你试图处理请求的结果,不管它的状态如何,但是你仍然需要对接收到的数据进行无/空检查。您抛出的异常必须通过@try - @catch进行处理。

+0

两个人无法阅读答案,写评论或两者兼而有之? –

0

http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

,包括从您的appDelegate示例代码的文件/代码后,在类中创建的appDelegate的实例要检查网络连接,并使用下列内容:

- (id)objectWithData:(NSData *)jsonData error:(NSError **)error 
{ 
    YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication SharedApplication]delegate]; 

  if (![appDelegate checkNetworkConnectionAndWarnUser:YES]) 
    { 
     NSLog(@"No internet"); 
    } 
    else 
    { 
     return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]); 
    } 
} 
相关问题