Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么NSData dataWithContentsOfURL有时返回空值?_Objective C_Cocoa - Fatal编程技术网

Objective c 为什么NSData dataWithContentsOfURL有时返回空值?

Objective c 为什么NSData dataWithContentsOfURL有时返回空值?,objective-c,cocoa,Objective C,Cocoa,我非常感谢这篇文章,尤其是@christo16。我以前依赖ASIHttpRequest只是为了从PHP服务器获取值。现在仅使用以下代码行: NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]] 我可以得到我想要的功能 但为什么有时该行会导致pageContents为空呢。我已经将该行更改为: NSString *fullUrl = [NSStr

我非常感谢这篇文章,尤其是@christo16。我以前依赖ASIHttpRequest只是为了从PHP服务器获取值。现在仅使用以下代码行:

NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]]
我可以得到我想要的功能

但为什么有时该行会导致pageContents为空呢。我已经将该行更改为:

NSString *fullUrl = [NSString stringWithFormat:@"http://www.apple.com"];
NSURL *url = [[NSURL alloc] initWithString:fullUrl];
NSData *pageContents;
NSString *response = NULL;

while(response==NULL)
{
    pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:fullUrl]];
    response = [NSString stringWithUTF8String:[pageContents bytes]];
    NSLog(@"content = %@", response);
}
有没有更好的办法?到目前为止,我没有问题。我只是想知道是否有一种更优雅的方法可以达到同样的效果


谢谢

如果检索数据时出错,它将返回
nil


您可以使用
dataWithContentsOfURL:options:error:
消息来找出返回nil的原因。错误将在您传递的
NSError*
指针中返回。

可能是图片太大或url不正确

NSError* error = nil;
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error];
if (error) {
   NSLog(@"%@", [error localizedDescription]);
} else {
   NSLog(@"Data has loaded successfully.");
}

检查您的网络连接。如果已连接,则问题将得到解决。

感谢@Brigham提供此信息。但是,问题是,它有时无效,有时无效。所以,我只是强迫它尝试,直到它不是空的。如果使用dataWithContentsOfURL:options:error,您将如何处理此类错误?@swdev:。通常这会向用户显示错误。这一行的缺点是它会阻塞用户界面,可能会阻塞很长时间。循环更糟糕:如果服务器不响应连接,那么它将永远有效地阻止UI(直到SpringBoard厌倦并终止您的进程)。