2016-08-08 95 views
2

我正在尝试读取位于远程托管的远程txt文件。我有一个链接,如http://www.link.com/file.txt无法从NSURL获得结果

我使用这个代码:

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模拟器上运行我的应用程序。 我在做什么错?

对不起,我的英语不好。

+0

返回的错误是什么? –

+0

我在一个操场上测试了你的代码(以google.com为例),我得到了一个结果。代码看起来工作得很好。你能分享txt链接吗?您可以在您的终端中获取链接(例如使用wget)。 –

+0

您可以使用代理调试器(例如Charles Proxy等)来验证您的http请求是否正在发送,并且响应是否包含预期的内容。 –

回答

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]; 
0

未测试代码,但这应该引导您朝正确的方向发展。

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