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相关的错误,其原因未知。
简单地说,它什么都不告诉我们
但是一般来说, NSData
的dataWithContentsOfURL
只能用来访问本地文件资源。
重要提示:请勿使用此同步方法来请求基于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,并解决了这个问题。 “暗示”是这个方法没有立即返回 – 大约一分钟后超时。