1
我有一個帶有按鈕和標籤的示例視圖。 當用戶按下按鈕的動作從外部網站接收JSON,我需要把一個字符串放在標籤。從完成處理程序中更改標籤文本
我試圖從完成處理程序執行此操作,但此時標籤插座無法識別。
這裏是我的代碼:
import UIKit
class ViewController: UIViewController, NSURLSessionDelegate {
@IBOutlet weak var lblReceivedText: UILabel!
var session : NSURLSession!
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 15.0
session = NSURLSession(configuration : configuration, delegate : self, delegateQueue : nil)
}
override func viewDidLoad()
{
super.viewDidLoad()
}
@IBAction func btnGerarMensagem(sender: AnyObject)
{
var errorx : NSError?
let url = NSURL(string: "http://labs.bible.org/api/?passage=random&type=json")
let task = session.dataTaskWithURL(url! ,
completionHandler: { [weak self] (data: NSData!,
response : NSURLResponse! ,
error : NSError!) in
var error: NSError?
var array = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as NSArray
var citacao: NSDictionary = array.objectAtIndex(0) as NSDictionary
var Quote = citacao["text"] as String
lblReceivedText.text = Quote
self!.session.finishTasksAndInvalidate()
})
task.resume()
} // IBAction
}
內特嗨,現在是第一次運行時的println顯示的結果爲控制檯Citacao 0 OK({ BOOKNAME =耶利米 章= 18; 文本=「耶和華對我說,」 詩句= 5; } ),但在UI標籤上沒有任何內容。對於後續處理 - > 2015-02-17 18:25:28.919 Biblia [9568:323097]嘗試在已失效的會話中創建任務 2015-02-17 18:25:32.559 Biblia [9568:323097]嘗試在已失效的會話中創建一個任務 – GCoe 2015-02-17 20:30:08
刪除self?.session.finishTasksAndInvalidate()後,我沒有更多的錯誤,但標籤保持空白... – GCoe 2015-02-17 20:40:31
對不起,沒有看過第一個問題。您需要回到主線程來更新標籤,因爲它是UI的一部分。而且,是的,你不需要在那裏使會話失效,特別是如果你要重用它。查看更新的答案。 – 2015-02-17 20:42:30