2015-02-24 98 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