2014-02-22 83 views
1

我真的有一個奇怪的問題:dataWithContentsOfURL已經開始在蜂窩上返回錯誤代碼256,但不通過WiFi。dataWithContentsOfURL返回NSCocoaErrorDomain代碼= 256通過蜂窩,但不是WiFi

操作無法完成。 (可可錯誤256.)

我確實有一個蜂窩數據連接,它正在運行,所以它不是我的蜂窩連接的問題。加上代碼在wifi上工作正常,所以基本代碼不是問題。有問題的代碼是:

dispatch_queue_t queue = dispatch_queue_create("com.appName.FetchImage", DISPATCH_QUEUE_SERIAL); 
dispatch_async(queue, ^{ 
        ... 
        NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; 
        NSLog(@"URL: %@", url); 
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
        NSError *error = [[NSError alloc] init]; 
        NSData *imgData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error]; 
        if (error) NSLog(@"Error loading data: %@", error); 
        UIImage *image = [UIImage imageWithData:imgData]; 
        ... 
}); 

有什麼想法?我不知道爲什麼會發生這種情況。它也出現在vanilla dataWithContentsOfURL(與選項相反)。

+0

如果您的應用程序啓用了蜂窩數據,請嘗試查看「設置 - >蜂窩 - >使用蜂窩數據」。這是最新的iOS功能,並且「Celluar禁用此應用」警報並不總是顯示,因此可能會給用戶造成混淆。如果您爲此應用設置蜂窩數據,並在蜂窩網絡中使用該應用,則這些基礎方法將返回錯誤256. – viggio24

+0

@ viggio24好的想法,但這不是它 - 只需雙重檢查,手機數據確實已啓用。 – w4th

+0

你的代碼泄漏了一個NSError。你想要的'NSError * error = nil;' –

回答

4

NSCocoaErrorDomain Code = 256手段:

的文件系統或文件I/O相關的錯誤,其原因不明。

簡單地說,它告訴我們什麼都沒有

但是一般而言,NSDatadataWithContentsOfURL只能用於訪問本地文件資源。

重要提示:請勿使用此同步方法請求基於網絡的 URL。對於基於網絡的URL,此方法可以在慢速網絡上阻止當前線程 幾十秒,從而導致用戶體驗不佳,並且在iOS中可能會導致您的應用被終止。

您可以嘗試改進您的代碼並使用更好的方式下載數據。它可能會解決您遇到的問題。除了使用dataWithContentsOfURL的,你可以使用NSURLConnection的類的方法,如:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request 
          queue:(NSOperationQueue *)queue 
       completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler; 

基於:

Using NSURLConnection

NSData Class Reference

+0

這工作 - 無論出於何種原因,NSURLConnection的工作原理,儘管dataWithContentsOfURL在後臺線程是加載圖像的方式是由我發現的許多資源推薦。謝謝。 – w4th

+0

沒問題的隊友:) – RaffAl

1

在我的情況下,這個問題是一個糟糕的網絡連接在我的移動4G上。它不是xcode特定的,它也存在於常規的Safari瀏覽器中。我切換到不同的網絡,並解決了問題。 「暗示」是該方法沒有立即返回 - 大約一分鐘後超時。

相關問題