SWIFT / iOS: 屏幕出现时数据需要几秒钟加载
SWIFT / iOS: Data takes a few seconds to load when screen appears
我创建了一个用户配置文件屏幕,加载后,数据需要几秒钟才能显示。我正在寻找更优雅的解决方案。
这是故事板中的视图控制器:
如您所见,有占位符文本。问题是在加载此屏幕时(在从数据库中检索数据之前),此文本出现的时间非常短。
这是数据完全加载后的屏幕样子:
我看到上一个屏幕上的 Activity 指示器可能是一个很好的解决方案。任何人都可以验证这一点并指出一个好的 SWIFT 教程或 Stack Overflow 解决方案吗?
更新:
我按照建议将数据加载到之前的 View Controller 上。我 运行 遇到的问题是我存储数据的常量无法在 prepareForSegue -
中访问
override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
let query = PFQuery(className:"UserProfileData")
query.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects! as? [PFObject] {
for object in objects {
let yourselfObject = object["yourself"] as! String?
let brideGroomObject = object["brideGroom"] as! String?
}
}
} else {
print(error)
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "RSVPToUserProfile" {
if let destination = segue.destinationViewController as? UserProfileViewController {
destination.yourselfPassed = yourselfObject
destination.brideGroomPassed = brideGroomObject
}
}
}
这个其实很简单...只需从故事板中删除占位符文本即可。这样就不会 "appear very briefly."
如果您不喜欢空白屏幕的想法,请将加载代码移至显示视图的位置。在加载代码完成之前不要显示视图。如果这样做,您将必须在呈现时将数据传递给视图控制器。
-- 编辑--
不要覆盖 performSegueWithIdentifier:sender:
! 这样做不会实现您的目标。
我再说一遍。将加载代码移动到您调用 的地方执行 segue,并延迟调用直到数据加载完毕。 (即,在您获得项目后,将 perform segue 调用移动到 findObjectsInBackgroundWithBlock
块中。
我创建了一个用户配置文件屏幕,加载后,数据需要几秒钟才能显示。我正在寻找更优雅的解决方案。
这是故事板中的视图控制器:
如您所见,有占位符文本。问题是在加载此屏幕时(在从数据库中检索数据之前),此文本出现的时间非常短。
这是数据完全加载后的屏幕样子:
我看到上一个屏幕上的 Activity 指示器可能是一个很好的解决方案。任何人都可以验证这一点并指出一个好的 SWIFT 教程或 Stack Overflow 解决方案吗?
更新: 我按照建议将数据加载到之前的 View Controller 上。我 运行 遇到的问题是我存储数据的常量无法在 prepareForSegue -
中访问override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
let query = PFQuery(className:"UserProfileData")
query.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects! as? [PFObject] {
for object in objects {
let yourselfObject = object["yourself"] as! String?
let brideGroomObject = object["brideGroom"] as! String?
}
}
} else {
print(error)
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "RSVPToUserProfile" {
if let destination = segue.destinationViewController as? UserProfileViewController {
destination.yourselfPassed = yourselfObject
destination.brideGroomPassed = brideGroomObject
}
}
}
这个其实很简单...只需从故事板中删除占位符文本即可。这样就不会 "appear very briefly."
如果您不喜欢空白屏幕的想法,请将加载代码移至显示视图的位置。在加载代码完成之前不要显示视图。如果这样做,您将必须在呈现时将数据传递给视图控制器。
-- 编辑--
不要覆盖 performSegueWithIdentifier:sender:
! 这样做不会实现您的目标。
我再说一遍。将加载代码移动到您调用 的地方执行 segue,并延迟调用直到数据加载完毕。 (即,在您获得项目后,将 perform segue 调用移动到 findObjectsInBackgroundWithBlock
块中。