dataWithContentsOfURL通过蜂窝返回NSCocoaErrorDomain Code = 256,但不返回wifi

时间:2014-02-22 19:59:08

标签: ios cocoa-touch networking ios7 nsdata

我遇到了一个奇怪的问题:dataWithContentsOfURL已经开始通过蜂窝网络返回错误代码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(与选项相反)。

2 个答案:

答案 0 :(得分:4)

NSCocoaErrorDomain Code = 256表示:

  

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

简单地说,它告诉我们没有

但一般来说,NSData的{​​{1}}只应用于访问本地文件资源。

  

重要说明:请勿使用此同步方法请求基于网络的方法   网址。对于基于网络的URL,此方法可以阻止当前线程   在慢速网络上持续数十秒,导致用户不畅   经验,在iOS中,可能会导致您的应用被终止。

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

NSURLConnection

基于:

Using NSURLConnection

NSData Class Reference

答案 1 :(得分:1)

就我而言,问题是我的移动4G网络连接不良。它不是特定于xcode的,它也存在于常规的Safari浏览中。我切换到另一个网络,解决了问题。 "提示"是因为该方法没有立即返回 - 它在大约一分钟后超时。