无法从 NSURL 获取结果
Can't get result from NSURL
我正在尝试读取位于远程主机的远程 txt 文件。我有一个 link,比如 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 模拟器上的应用程序。
我做错了什么?
抱歉我的英语不好。
还没有测试代码,但这应该会引导您朝着正确的方向前进。
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 文件。
不要使用 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];
我正在尝试读取位于远程主机的远程 txt 文件。我有一个 link,比如 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 模拟器上的应用程序。 我做错了什么?
抱歉我的英语不好。
还没有测试代码,但这应该会引导您朝着正确的方向前进。
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 文件。
不要使用 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];