Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift解析-嵌套调用问题_Ios_Swift_Parse Platform - Fatal编程技术网

Ios Swift解析-嵌套调用问题

Ios Swift解析-嵌套调用问题,ios,swift,parse-platform,Ios,Swift,Parse Platform,在我的应用程序中,我需要在不同的视图控制器中加载用户详细信息。我加载的详细信息不一定是当前登录的用户的详细信息(可以从currentUser检索,但有时是其他用户的详细信息,具体取决于场景) 到目前为止,每当我遇到上述需求时,我都会进行两次查询:第一次是加载详细信息(例如姓名、电话、地址等),第二次是加载该用户的个人资料图像 因此,我以一个嵌套调用结束,如下所示: let query = PFQuery(className: "_User") query.whereKey("appUserna

在我的应用程序中,我需要在不同的视图控制器中加载用户详细信息。我加载的详细信息不一定是当前登录的用户的详细信息(可以从currentUser检索,但有时是其他用户的详细信息,具体取决于场景)

到目前为止,每当我遇到上述需求时,我都会进行两次查询:第一次是加载详细信息(例如姓名、电话、地址等),第二次是加载该用户的个人资料图像

因此,我以一个嵌套调用结束,如下所示:

let query = PFQuery(className: "_User")

query.whereKey("appUsername", equalTo: self.friendObject.username!)

query.findObjectsInBackgroundWithBlock { (results, error) -> Void in
    let data = results as [PFObject]!
    if(error == nil)
    {
        self.friendObject.name = data[0]["name"] as? String
        self.friendObject.profilePic = data[0]["ProfilePic"] as? UIImage
        self.nameLabel.text = self.friendObject.name
        self.friendObject.objectId = data[0].objectId! as String
        self.getProfilePicture(self.friendObject.username!) { (result)->Void in

             self.profilePicImageView.image = result
        }

    }else{
        print("Error retrieving user details - try again")
    }
}
下面是getProfilePicture函数的定义:

func getProfilePicture(username: String, completion: (result: UIImage) -> Void)
    {
        var tempImage:UIImage? = UIImage(named: "sample-qr-code.png")!
        let query: PFQuery = PFQuery(className: "_User")
        query.whereKey("appUsername", equalTo: username)
        query.findObjectsInBackgroundWithBlock {
            (objects:[PFObject]?, error:NSError?) -> Void in
            for object in objects! {
               if(object["ProfilePic"] != nil)
               {
                let imageFiles = object["ProfilePic"] as! PFFile
                imageFiles.getDataInBackgroundWithBlock({
                    (imageData: NSData?, error: NSError?) -> Void in
                    if (error == nil) {
                        tempImage = UIImage(data:imageData!)!
                        let temp2Image: UIImage = Toucan(image: tempImage!).resize(CGSize(width: 100, height: 150)).maskWithEllipse(borderWidth: 3, borderColor: UIColor.whiteColor()).image
                            completion(result: temp2Image)
                    }
                 })
               }else{
                let invalidImage = UIImage(named: "Contacts-100.png")
                completion(result: invalidImage!)
               }
            }
        }
    }
用户解析类中的ProfilePic列是文件类型。我如何优化它,以便只执行一次调用来加载图像和详细信息(考虑到请求应该尽可能地最小化)


谢谢,

将您的
imageView
设置为
PFImageView
,然后您可以设置
PFImageView
的相应文件,如
self.friendObject.profilePic=data[0][“profilePic”]作为?PFFile
,然后您可以执行
self.profilePicImageView.file=self.friendObject.profilePic
,然后执行
self.profilePicImageView.loadInBackground

,loadInBackground不会触发请求?如果您所说的请求指的是一个将计入解析请求的请求,则是的,但方法也是如此你已经展示了。是的,确实如此,这就是为什么我想知道是否有一种方法可以减少请求…我在你的建议中看到的是一种不同的方法,而不是最小化请求。没有请求是无法做到这一点的,是的,我展示的方法是一种不同的方法,但它也比y的方法更安全、更优化您已经编写了。谢谢您分享我将使用的编写良好的代码,但这真的很不幸,没有其他方法可以解决。我非常担心请求的限制