【发布时间】:2015-12-08 16:23:12
【问题描述】:
现在我有一个 tableviewcontroller。当我单击其中一个单元格时,我会转到一个新的视图控制器,它显示有关我单击的项目的详细信息。
有时我需要的所有信息都尚未加载(尤其是在连接速度较慢的情况下),所以即使在 segue 之后,我也会尝试在后台加载它。我知道我可以冻结主线程并等待我的数据加载,但我宁愿有一个流畅的界面。
例如,如果尚未加载用户的个人资料图片,则会显示占位符图片并在加载真实图片时替换。但我似乎无法让这种行为起作用。这是我现在正在做的事情:
func onItemTap(send:AnyObject){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc: OtherViewController = storyboard.instantiateViewControllerWithIdentifier("OtherViewController") as! OtherViewController
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), {
while(self.parseUser == nil){//wait for it to load}
let profImage = (self.parseUser?.valueForKey("profilePictureLarge") as! PFFile)
profImage.getDataInBackgroundWithBlock({
(imageData: NSData?, error: NSError?) -> Void in
if (error == nil) && vc.profileImageView != nil{
vc.profileImageView.image = UIImage(data: imageData!)
vc.userNameLabel.text = self.parseUser?.valueForKey("displayName") as? String
vc.parseUser = self.parseUser
vc.pfObject = self.parseObject
}
})
})
//these are sent no matter what, but are replaced by background thread if needed
vc.parseUser = self.parseUser
vc.pfObject = self.parseObject
holder?.navigationController?.pushViewController(vc, animated: true)
}
我不确定我真正应该做什么。这似乎在某些情况下有效,但在大多数情况下根本不起作用。
如何异步发送正在后台线程某处加载的数据,并在我需要时可靠地显示它?
【问题讨论】:
-
为避免出现问题,您可以在请求完成之前使用进度 hud 阻止列表视图控制器,或者使用活动指示器显示空白详细信息视图控制器,并在请求完成时显示您的信息
标签: ios swift asynchronous parse-platform