dataWithContentsOfURL返回NSCocoaErrorDomain代码= 256蜂窝,但不是WiFi

真的很奇怪的问题,我有:dataWithContentsOfURL已经开始返回一个错误代码256蜂窝,但不是通过WiFi。

操作无法完成。 (cocoa错误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]; ... }); 

有什么想法吗? 我不知道为什么会发生这种情况。 它也发生在香草dataWithContentsOfURL(而不是与选项)。

NSCocoaErrorDomain Code = 256意味着:

文件系统或文件I / O相关的错误,其原因未知。

简单地说,它什么都不告诉我们

但是一般来说, NSDatadataWithContentsOfURL只能用来访问本地文件资源。

重要提示:请勿使用此同步方法来请求基于networking的URL。 对于基于networking的URL,这种方法可以在慢速networking上阻塞当前线程数十秒,导致糟糕的用户体验,并且在iOS中可能会导致您的应用被终止。

您可以尝试改进您的代码并使用更好的方式下载数据。 它可能会解决您遇到的问题。 而不是使用dataWithContentsOfURL ,您可以使用NSURLConnection的类方法,如:

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

基于:

使用NSURLConnection

NSData类参考

就我而言,这个问题在我的移动4G上是一个糟糕的networking连接。 它不是xcode特定的,它也存在于常规的Safari浏览器中。 我切换到不同的networking,并解决了这个问题。 “暗示”是这个方法没有立即返回 – 大约一分钟后超时。