【问题标题】:Can't get result from NSURL无法从 NSURL 获取结果
【发布时间】:2016-08-08 21:27:01
【问题描述】:

我正在尝试读取位于远程主机的远程 txt 文件。我有一个链接,比如http://www.link.com/file.txt

我正在使用此代码:

let myURLString = "http://google.com"
guard let myURL = NSURL(string: myURLString) else {
    print("Error: \(myURLString) doesn't seem to be a valid URL")
    return
}

do {
    let myHTMLString = try String(contentsOfURL: myURL)
    print("HTML : \(myHTMLString)")
} catch let error as NSError {
    print("Error: \(error)")
}

但总是得到空字符串。文件肯定不是空的。 我在 Xcode 的 iOS 模拟器上运行我的应用程序。 我做错了什么?

对不起,我的英语不好。

【问题讨论】:

  • 返回的错误是什么?
  • 我在操场上测试了你的代码(以 google.com 为例),我得到了结果。该代码似乎工作正常。可以分享一下txt链接吗?您可以在终端中获取链接吗(例如使用 wget)。
  • 您可以使用代理调试器(例如 Charles Proxy 等)来验证您的 http 请求是否正在发送并且响应包含预期的内容。
  • 但即使我尝试从 google.com 获取结果也会出现错误

标签: ios swift xcode nsurl


【解决方案1】:

不要使用 stringWithContentsOfURL 和朋友从远程服务器检索数据。这是一个专门为与本地文件一起使用而设计的同步 API。它甚至不能保证在后台线程上正确处理网络请求,更不用说在主线程中了。

从远程 URL 检索数据的正确方法是使用 NSURLSession。我不是 Swift 程序员,所以我不打算尝试 Swift sn-p,但 Objective-C 等价物是:

NSURL *url = ...
NSURLSessionDataTask *task =
    [NSURLSession sharedSession dataTaskWithURL:url
                              completionHandler:^(NSData *data,
                                                  NSURLResponse *response,
                                                  NSError *error) {
        if (error) {
            // Handle client-side errors here
        } else if (((NSHTTPURLResponse *)response).statusCode != 200) {
            // Handle server-side errors here
        } else {
            NSString *stock = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            // Do something with data here.
        }
    }];
[task resume];

【讨论】:

    【解决方案2】:

    尚未测试代码,但这应该会引导您朝着正确的方向前进。

    var statsRequest: String = "http://www.link.com/file.txt"
    var statsRequestURL: NSURL = NSURL(string: statsRequest)!
    var error: NSError? = nil
    var stockNews: String = try! String.stringWithContentsOfURL(statsRequestURL, encoding: NSUTF8StringEncoding)
    

    如果文本文件有不同的编码,你可以使用 NSASCIIStringEncoding 然后解析 html 文件。

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 2015-10-17
      • 2013-06-26
      • 2016-03-30
      • 2012-04-26
      • 2018-09-03
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多