我正在尝试从服务器下载一个txt文件但应用程序在我下载字符串时会冻结一点:
override func viewDidAppear(animated: Bool) {
let getPrice = try! String(contentsOfURL: NSURL(string: "http://site.cin/price.txt")!, encoding: NSUTF8StringEncoding)
self.price.text = getPrice
}
我不想使用AFNetwroking等......
答案 0 :(得分:3)
您应用的所有用户界面都在主线程上运行。如果您尝试在主线程上执行任何与网络相关的任务(至少需要几秒钟),那么它将在该段时间内阻止主线程。因此,除了UI
相关更改之外,您不应该在主线程上执行此类任务。因此,最好在网络调用上发出异步请求,并在完成时更新主线程上的UI
。
你应该做点什么,
NSURLSession.sharedSession().dataTaskWithURL( NSURL(string: "http://site.cin/price.txt")!) { (data, response, error) in
var getprice = NSString(data: data!, encoding: NSUTF8StringEncoding)
dispatch_async(dispatch_get_main_queue(), {
self.price.text = getPrice
})
}
答案 1 :(得分:1)
您正在主线程上运行。试试这个:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
let getPrice = try! String(contentsOfURL: NSURL(string: "http://site.cin/price.txt")!, encoding: NSUTF8StringEncoding)
self.price.text = getPrice
dispatch_async(dispatch_get_main_queue()) {
// update some UI
}
}
答案 2 :(得分:1)
试试这个:
let bgQueue = NSOperationQueue()
bgQueue.addOperationWithBlock {
let getPrice = try! String(contentsOfURL: NSURL(string: "http://site.cin/price.txt")!, encoding: NSUTF8StringEncoding)
self.price.text = getPrice
}
此代码在后台运行,不会阻止您的主线程,因此应用程序不会冻结。