我刚开始学习Swift。我创建了一个管理REST API调用的类,该方法接受3个参数,data,successCallback和failCallback。
一切都很好,我得到了数据,我解析了JSON等等。
我的问题是我无法在传递给API方法的successCallback中执行与IBOutlet相关的任何事情。我试过self.textfield.text,textfield.text,没什么用。没错,没什么。
func naturalSearch(data : String, callback:(NSDictionary) -> (), fail :(String) -> ()) {
request(getLink("v2/natural"), data : data, callback : callback, fail : fail)
}
这是API方法。
service.naturalSearch(SearchTextfield.text, callback: processResponse, fail: responseFail)
这就是我调用方法的方法。内部processResponse没有任何与网点相关的工作。我有3个,2个文本域和一个tableview。我试图隐藏/更改标签/等但没有任何作用。
谢谢你, 米哈伊
答案 0 :(得分:1)
那是因为你正在使用一个回调函数,它在UI线程之外执行。
您应该使用dispatch_async
包装UI更改代码。
例如:
dispatch_async(dispatch_get_main_queue(), {
self.labelOutlet.text = "Text"
})
答案 1 :(得分:0)
您只能在主线程中修改UI元素。要访问它,请使用:
dispatch_async(dispatch_get_main_queue()) { /* your Code */ }