2015-04-17 28 views
0

我在Objective C中有個奇怪的問題。NSURL有時會給遠程服務器找不到初始嘗試的錯誤

我有這段代碼片段。問題是當我在Iphone或iPad上啓動應用程序4-5次時,我沒有找到遠程服務器,並且在殺死應用程序4-5次後都一切順利。服務器可用,並且可以從移動Safari瀏覽器進行瀏覽。

任何幫助將不勝感激。

NSURL *scriptUrl = [NSURL URLWithString:@"https://www.zzzzzz-zz.zzzzzz-zzzz.com/zzzzz/"]; 
NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; 
if (data) 
{ 
    //COMPAS is reachable 
    NSLog(@"Device is connected to the internet"); 
} 
else 
{ 
    //COMPAS is not reachable 
    NSLog(@"Device is connected to the internet"); 
    [self performSelectorOnMainThread:@selector(showHostAlert:) withObject:nil waitUntilDone:NO]; 
} 
+0

這樣我們就只能猜測發生了什麼。你確定它是https?永遠是你的服務器了。網址參數是否每次都正確? –

回答

0

我的建議是使用NSURLConnection或NSURLSession獲取數據。使用contentsOfURL類的工廠方法(如NSData,NSString等)除了本地URL之外不適用。如果從遠程URL獲取數據時出現錯誤,則無法獲得錯誤狀態。

因此,請繼續使用連接或會話類進行請求,然後使用完成時提供的數據。 如果你沒有得到數據,然後檢查這些類將提供的NSError對象。

+0

dataWithContentsOfURL有時會返回NULL,即使服務器已啓動。可能是什麼原因? –

+0

您正在從網絡請求數據。這可能是任何原因。這就是爲什麼這些方法不適用於遠程URL。嘗試一下我的建議,並使用幾行代碼,您應該能夠診斷您的服務器上的數據傳輸有哪些問題。 –

0

NSData上的dataWithContentsOfUrl方法僅適用於從本地資源加載數據。

  • 您可以使用NSUrlRequest對象使用NSUrl,然後使用NSUrlConnection發出請求。
  • 您還可以使用NSUrlSession對象以及

實例同步獲取數據:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverAddress] 
           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; 

[request setHTTPMethod: @"GET"]; 

NSError *requestError; 
NSURLResponse *urlResponse = nil; 

NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError]; 
相關問題