2010-01-05 35 views
3

我目前正在從外部API讀取一些XML。initWithContentsOfURL的奇怪錯誤

下面的代碼工作正常:

NSError *error = nil; 

NSString *xmlString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 

不過,我想添加一些錯誤處理(「服務器無法到達」,「沒有網絡連接」等)。於是,我把這個塊地方從可達示例代碼一點幫助:

if ([error code] == kCFURLErrorNotConnectedToInternet) { 
     NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"No Internet connection",@"Error message displayed when not connected to the Internet.") forKey:NSLocalizedDescriptionKey]; 
     NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo]; 
     [self handleError:noConnectionError]; 
    } else { 
     // otherwise handle the error generically 
     [self handleError:error]; 
    } 

該方法的HandleError簡單地顯示與錯誤的詳細信息的UIAlertView中。當我沒有連接的情況下運行應用程序時,我希望看到我的錯誤消息。然而,我所得到的只是「操作無法完成(可可錯誤256)」,從我可以收集的是一個通用的讀取錯誤。

起初我以爲它可能只是TouchXML的方法,但正如您所看到的,我將其更改爲NSString的initWithCOntentsOfURL。

任何人都可以在這個問題上得到任何解釋嗎?

感謝,

豐富

+0

P.S。; 'initWithContentsOfURL:'是一種同步方法 - 因此將其封裝在NSOperation/GCD塊中,或切換到異步網絡。 – 2012-01-30 04:35:45

回答

0

你看到一些其他錯誤比kCFURLErrorNotConnectedToInternet。該錯誤消息不是來自您的自定義錯誤,而是由引擎蓋下的某個對象生成的。您需要轉儲您實際得到的錯誤的userInfo字典以查看詳細信息。我會記錄它,而不是使用警報,以確保您獲得全部。

如果userInfo字典實際上是空的,我會開始測試url以查看它是否實際返回任何內容。嘗試初始化一個數據對象,看看你得到了什麼。這將在URL的問題與將數據轉換爲字符串的問題之間縮小。

+0

連接到Internet時,XML會被下載並放入字符串或touchxml對象中。當沒有連接時,我需要這個錯誤 - 只是這個錯誤看起來像錯誤!豐富 – Rich 2010-01-05 21:53:54

0

嘗試這種情況: 1)使用dataWithContentsOfURL 2創建的NSData)否僅創建的xmlString當NSData的創建上述不爲空,即通過檢查是否(數據)