2012-09-11 201 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]); 
    } 
} 
相關問題