【问题标题】:Why NSData dataWithContentsOfURL sometimes return NULL value?为什么 NSData dataWithContentsOfURL 有时会返回 NULL 值?
【发布时间】:2011-10-31 05:55:14
【问题描述】:

非常感谢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);
}

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

谢谢

【问题讨论】:

  • 单行的缺点是它会阻塞你的用户界面,可能会阻塞很长时间。循环更糟糕:如果服务器没有响应连接,那么它将永远有效地阻塞 UI(直到 SpringBoard 受够并杀死你的进程)。

标签: objective-c cocoa


【解决方案1】:

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

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

【讨论】:

  • 感谢@Brigham 提供的信息。但是,问题是,它有时为空,有时不是。所以,我只是强迫它尝试直到它不为空。如果使用 dataWithContentsOfURL:options:error,你如何处理?
  • @swdev:您查看错误以找出问题所在,并对问题做出适当反应。通常这会将错误呈现给用户。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    检查您的网络连接。如果连接好了,问题就解决了。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2023-02-20
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多