我遇到的真是个奇怪的问题:dataWithContentsOfURL已经开始通过蜂窝网络返回错误代码256,但没有通过wifi返回错误代码256。

该操作无法完成。 (可可错误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(与options相对)中。

最佳答案

NSCocoaErrorDomain Code = 256的意思是:

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

简而言之,它告诉我们没有任何内容

但是,通常,NSDatadataWithContentsOfURL仅应用于访问本地文件资源。

重要提示:请勿使用此同步方法来请求基于网络的请求
网址。对于基于网络的URL,此方法可以阻止当前线程
在缓慢的网络上持续数十秒钟,导致用户质量下降
体验,并且在iOS中,可能会导致您的应用终止。

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

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

基于:

Using NSURLConnection

NSData Class Reference

关于ios - dataWithContentsOfURL通过蜂窝网络返回NSCocoaErrorDomain代码= 256,但不返回wifi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21959731/

10-12 00:08
查看更多