2015-01-12 3 views
0

Я только начал изучать Свифт. Я создал класс, который управляет вызовом API REST, и метод принимает 3 параметра, данные, successCallback и failCallback.Доступ к выходам из функции

Все хорошо, я получаю данные, я разобрать JSON и т.д.

Моя проблема заключается в том, что я не могу, что связано с IBOutlets внутри successCallback, который передается методу API делать. Я пробовал 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 текстовых поля и таблица. Я пытался скрыть/сменить ярлык/etc, но ничего не работает.

Спасибо, Михай

ответ

0

Это потому, что вы работаете в функции обратного вызова, которая выполняется вне потока пользовательского интерфейса. Вы должны обернуть свой код изменения пользовательского интерфейса dispatch_async.

Например:

dispatch_async(dispatch_get_main_queue(), { 
    self.labelOutlet.text = "Text" 
}) 
+0

Вы спасатель жизни: D Я боролся с этим в течение последних 3 часов. Спасибо: D –

+0

Вы должны отметить правильный ответ chustar: – Bek

0

Вы можете изменить только элементы пользовательского интерфейса в главном потоке. Чтобы получить к нему доступ, используйте:

dispatch_async(dispatch_get_main_queue()) { /* your Code */ }