2015-02-24 2 views
0

Я знаю его интересное название для моего вопроса. Простите за это. Вот моя проблема; Я делаю простой экран входа (с фреймворком facebook). Если пользователь хочет войти в свою учетную запись в facebook, сначала он должен подтвердить страницу на facebook. И затем я получаю их адрес электронной почты, имя, фамилию и т. Д. Информацию пользователя.Почему NSNotification работает медленно?

После этого я просто прошу пароль для своего приложения. Этот экран пароля является видом. и открытие на главном экране (не как новый viewcontroller, его вид на главный вид). И после подтверждения страницы facebook это выглядит.

На этом виде пароля есть 2 текстовых поля и 2 кнопки. текстовое поле для пароля (и подтверждения) и первая кнопка отправить запрос на мой веб-сервис с информацией пользователя. и другая кнопка - кнопка «отменить».

это проблема. Когда пользователь отправляет запрос, я создаю nsnotification для ожидания ответа. после получения ответа. Я хочу, чтобы этот пароль выглядел спрятаться.

вот код:

@IBAction func buttonSave(sender: AnyObject) { 
     var myObj = connectObject() 
     myObj.sendRequest("http://localhost:8888/iphone/hearMe/index.php", param: "id=test123") 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "actOnSpecialNotification", name: "sendDataCheck", object: nil) 
    } 
func actOnSpecialNotification() { 
     println("ok I got success respond from webservice") 
     self.viewPassword.hidden = true /*This is my view */ 
    } 

с этим кодом. «viewPassword» вид скрывается, но не мгновенно. Он скрывается через 10 или 15 секунд. Как я могу сразу скрыть это представление после получения ответа от webservice?

+0

так между Println и шкура задержка? –

+0

и вы стреляете извещения в основной поток? –

ответ

2

Из вашего вопроса неясно, находится ли 10-15 секунд между нажатием кнопки и скрытием вида или между печатью «ok I got ...» и скрытием вида.

Если промежуток между нажатием кнопки и вызовом actOnSpecialNotification(), то приведенный выше код нам не поможет. Нам нужно знать, какой объект отправляет уведомление sendDataCheck и почему это так долго. Может быть, это займет столько времени, чтобы поговорить с сетью. Возможно, он отправляет уведомление, прежде чем вы начнете его наблюдать. Вы, вероятно, захотите позвонить addObserver() перед отправкой запроса, а не после (на всякий случай там будет операция async).

Если промежуток между печатью «ok I go ...» и скрытие вида, то наиболее распространенной причиной этого является то, что уведомление было отправлено в фоновом режиме. Вы не можете взаимодействовать с UIKit нигде, кроме главной очереди, и странные запаздывания являются обычным симптомом, когда вы это делаете.

(Примечание стороны:.. В случае сомнений, используйте let, не varmyObj лучше определяется let здесь Это помогает защитить от многих видов жуков.)

+1

это хорошо написанный комментарий о отсутствии ответа –

+0

вы объясните мой вопрос лучше меня. :). Я получил это сообщение «ОК, я получил успешный ответ от webservice» мгновенно (сразу после того, как я нажму кнопку.), так что «viewPassword» скрывается? – Antiokhos

+0

Проверьте, что вы находитесь в главной очереди (посмотрите на значение 'NSThread.isMainThread()') –