正在主线程上执行长时间运行的操作。迅速

时间:2014-12-27 01:43:25

标签: ios iphone swift parse-platform

在我的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以外的其他内容吗?谢谢。

2 个答案:

答案 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")
        }
      }
    }