解析查询,图像数组返回空

时间:2015-08-02 22:23:55

标签: ios swift parse-platform

我正在尝试查询我的_User类中的特定objectId,并从中下载图像。

如果根据parse.com用户表进行检查,则传递objectId的{​​{1}}是正确的。{/ p>

返回的数组总是空的

任何帮助都将不胜感激。

userList

1 个答案:

答案 0 :(得分:1)

您还不了解完成处理程序的工作原理。 findObjectsInBackgroundWithBlock 设计立即返回。它将查找任务排入后台线程。任务完成后,可能会在同一个后台线程上调用完成处理程序代码。

请参阅:How to explain callbacks in plain english? How are they different from calling one function from another function?

所以你调试不正确,希望调试器在完成处理程序中点击断点,同时单步执行创建后台任务的主线程。它不会那样工作。

由于您对调试感到困惑,因此在每个阶段都会提供有用的println(),例如:

        if error != nil{// This never prints anything to console
            println(error)
        }
        else {
            println("No error!")
        }

        if let results = results as? [PFObject] {
            println("Got \(results.count\) results!")
            for object in results {
                println("Got result: \(object)!")
                let userPicture = object["image"] as! PFFile

                userPicture.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    if error == nil {
                        println("Got user picture!")
                        if let imageData = imageData {
                            let image = UIImage(data:imageData)
                            arrayToReturn.append(image!)
                        }
                    }
                    else {
                        println("could not get user picture!")
                    }
                }
            }
        }
        else {
            println("What the hell? Results was not a [PFObject]")
        }

NOW 关于正确设计回调:

您的主要功能为数据创建请求,然后立即返回。它应该返回 Void ,而不是数组。

什么应该反映新数据?让我们说它是一个名为myTableView的UITableView。然后,当数组填入后,将其保存在类的存储属性中,并在myTableView.reloadData()调用主线程中调用dispatch_asyncUITableViewDataSource函数使用上述存储的数组属性。

我确定这令人困惑。您需要阅读有关集成后台数据的整个教程。

有趣的是,我只是为其他用户做了这个!

Tutorial in retrieving, mutating and saving array from Parse.com in Swift with UITableView