2016-01-19 2 views
0

В моем приложении мне нужно загрузить данные пользователя в разные контроллеры. Детали, которые я загружаю, не обязательно принадлежат пользователю, который в настоящий момент подписан (который может быть получен из currentUser, но иногда могут быть другими пользователями в зависимости от сценария.Swift Parse - Nested Calls Issue

До сих пор я нахожусь, когда представленный вышеописанный вопрос, я сделать два запроса:. Во-первых, чтобы загрузить детали (например, имя, номер телефона, адрес и т.д.) и секунды, чтобы загрузить изображение профиля этого пользователя

так что я в конечном итоге с вложенного вызова, такие, как показано ниже:

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 в классе parse пользователя имеет тип файла. Как я могу оптимизировать это, так что я делаю только один вызов для загрузки изображения и деталей (учитывая, что запросы должны быть максимально сведены к минимуму).

Спасибо,

ответ

0

сделать ваш imageView в PFImageView, а затем вы можете установить соответствующий файл в PFImageView как self.friendObject.profilePic = data[0]["ProfilePic"] as? PFFile, а затем вы можете сделать self.profilePicImageView.file = self.friendObject.profilePic, а затем self.profilePicImageView.loadInBackground

+0

loadInBackground не инициируют запрос? –

+0

Если по запросу вы имеете в виду запрос, который будет учитываться в ваших запросах Parse, тогда да, но это будет так же, как вы показали. – pbush25

+0

Да, действительно, именно поэтому я хотел знать, есть ли способ уменьшить запрос ... то, что я вижу в вашей рекомендации, - это другой подход, а не минимизация запросов. –