我正在尝试将我的UILabel更新为Parse数据库中的String。 我的问题是标签在我第一次登录时不会更新我的firstnameLabel。但它会更新,当我登录(没有任何反应)时,按下Xcode中的停止按钮,然后再次启动它(仍然登录)然后更新标签。 我怎么能更快地做到这一点??
这是我的代码:
var currentUser = PFUser.currentUser()
if currentUser != nil {
var query = PFQuery(className:"_User")
query.getObjectInBackgroundWithId(currentUser.objectId) {
(bruger: PFObject!, error: NSError!) -> Void in
if error == nil && bruger != nil {
var firstName: String = bruger["firstname"] as String
self.usernameLabel.text = firstName
} else {
println("Error")
}
}
} else {
self.performSegueWithIdentifier("goto_login", sender: self)
}
希望你能帮助我!
答案 0 :(得分:0)
不是试图通过id再次加载用户对象,而是尝试仅进行提取。
[currentUser fetchIfNeededInBackgroundWithBlock: ... ];
通过尝试加载对象,您可能会获得缓存版本。
答案 1 :(得分:0)
我在某个地方读到了它可能是因为the can被置于ViewDidLoad中。我试图把它放在那之外它起作用了!
答案 2 :(得分:0)
听起来你把它放在ViewDidLoad方法中。您应该将其放在ViewWillAppear方法中。这是一个例子。
1)ViewDidLoad - 每当我将控件添加到应该与视图一起出现的视图时,我就把它放在ViewDidLoad方法中。基本上,只要将视图加载到内存中,就会调用此方法。例如,如果我的视图是带有3个标签的表单,我会在这里添加标签;没有这些形式,视图永远不会存在。
2)ViewWillAppear:我通常只使用ViewWillAppear来更新表单上的数据。因此,对于上面的示例,我将使用它来实际将数据从我的域加载到表单中。创建UIViews是相当昂贵的,你应该尽可能避免在ViewWillAppear方法上这样做,因为当它被调用时,这意味着iPhone已经准备好向用户显示UIView,你在这里做的任何重量将以非常明显的方式影响性能(如动画延迟等)。
3)ViewDidAppear:最后,我使用ViewDidAppear来启动需要很长时间才能执行的新线程,比如执行webservice调用以获取上面表单的额外数据。好的是因为视图已经存在并且正在向用户显示,所以在获取数据时,您可以向用户显示一条漂亮的“等待”消息。