为什么NSData dataWithContentsOfURL有时会返回NULL值?

时间:2011-10-31 05:55:14

标签: objective-c cocoa

我非常感谢文章Convert NSData bytes to NSString?,尤其是@ christo16。我之前依赖于ASIHttpRequest只是为了从PHP服务器获取价值。现在只使用这行代码:

NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]]

我可以获得我想要的功能。

但为什么有时候该行导致pageContents为NULL。我已经将这一行改为:

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);
}

有没有更好的方法呢?到目前为止,我没有问题。我只是想知道是否有更优雅的方法来实现相同的结果

由于

3 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:1)

可能是图片太大或网址不正确。

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

答案 2 :(得分:0)

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