无法从NSURL获得结果

时间:2016-08-08 21:27:01

标签: ios swift xcode nsurl

我正在尝试读取位于远程主机的远程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模拟器上运行我的应用程序。 我做错了什么?

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

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

从远程URL检索数据的正确方法是使用NSURLSession。我不是Swift程序员,所以我不会尝试使用Swift片段,但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];

答案 1 :(得分:0)

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

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文件。

相关问题