在我的ProfileViewController
中,我有一个查询,用于检索存储为PF文件的用户个人资料图片。
var query = PFQuery(className:"Users")
query.whereKeyExists("profilePicture")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
self.userNameLabel.text = PFUser.currentUser().username
if let imageFile = PFUser.currentUser().objectForKey("profilePicture") as? PFFile {
if let data = imageFile.getData() {
self.profPic.image = UIImage(data: data)
}
}
}
else {
println("User has not profile picture")
}
}
这是此视图中唯一的查询,我在我的应用主页中有另一个查询,其中包含所有用户的所有帖子。我得到的错误A long-running operation is being executed on the main thread.
后跟Break on warnBlockingOperationOnMainThread() to debug.
我不知道如何解决这个问题,因为我需要进行另一个查询以获取当前用户发布的个人资料。我应该使用findObjectsInBackgroundWithBlock
以外的其他内容吗?谢谢。
答案 0 :(得分:5)
警告来自Parse sdk。这部分:imageFile.getData()
是同步的,Parse足以在使用任何阻塞调用时发出警告。有几种getDataInBackground
......可供选择。 See them in the docs here
答案 1 :(得分:3)
详细说明@danh解决方案,这是更新后的源代码并且工作得很好,谢谢@danh!
override func viewDidLoad() {
super.viewDidLoad()
var query = PFQuery(className:"Users")
query.whereKeyExists("profilePicture")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
self.userNameLabel.text = PFUser.currentUser().username
if let imageFile = PFUser.currentUser().objectForKey("profilePicture") as? PFFile {
imageFile.getDataInBackgroundWithBlock { (data: NSData!, error: NSError!) -> Void in
self.profPic.image = UIImage(data: data)
}
}
}
else {
println("User has not profile picture")
}
}
}