2015-02-24 85 views
0

我知道我的問題有趣的標題。對不起。這是我的問題; 我正在做簡單的登錄屏幕(與Facebook框架)。如果用戶想用他/她的Facebook賬戶登錄,首先他/她必須確認Facebook頁面。然後我得到他們的電子郵件地址,姓名,用戶等信息。爲什麼NSNotification工作緩慢?

之後,我只是問他們我的應用程序的密碼。這個密碼屏幕是一個視圖。並在主視圖上打開(而不是作爲新的viewcontroller。它在主視圖上的視圖)並確認facebook頁面後,此wiew出現。

在此密碼查看有2個文本框和2個按鈕。用於paswword的文本框(和確認)和第一個按鈕用我的web服務發送請求和用戶信息。其他按鈕是「取消」按鈕。

這裏是問題所在。當用戶發送請求我創建nsnotification等待響應。得到迴應後。我想要這個密碼查看get hide。

這裏是代碼:

@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

和隱藏是延遲? – 2015-02-24 15:10:29

+0

和你在主線程上發出通知嗎? – 2015-02-24 15:10:57

回答

2

從您的問題中不清楚10-15秒是在按下按鈕和隱藏視圖之間還是在「確定我得到......」的打印和隱藏視圖之間。

如果在按下按鈕和呼叫actOnSpecialNotification()之間的滯後時間,那麼上面的代碼不會幫助我們。我們需要知道哪些對象發佈通知sendDataCheck以及爲什麼需要這麼長時間。也許與網絡交談只需要很長時間。也許它會在開始觀察之前發佈通知。您可能希望在發送請求之前而不是之後調用addObserver()(以防萬一存在異步操作)。

如果在打印「ok我去......」行和隱藏視圖之間存在滯後,那麼最常見的原因是通知被張貼在背景隊列中。除了主隊列之外,您無法與UIKit進行交互,而當您這樣做時,奇怪的滯後是常見症狀。

(旁註:。有疑問時,可使用let,不varmyObj是更好地在這裏定義let這有助於防止多種錯誤的。)所以的println之間

+1

這是一篇關於沒有回答的書面評論 – 2015-02-24 15:11:28

+0

你比我更好地解釋我的問題:)。我收到了這個消息:「確定我從webservice獲得了成功響應」(就在我點擊按鈕後)。那麼「viewPassword」應該隱藏嗎? – Antiokhos 2015-02-24 15:45:06

+0

檢查你是否在主隊列中(查看'NSThread.isMainThread()'的值) – 2015-02-24 15:56:08