В моем приложении мне нужно загрузить данные пользователя в разные контроллеры. Детали, которые я загружаю, не обязательно принадлежат пользователю, который в настоящий момент подписан (который может быть получен из 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 пользователя имеет тип файла. Как я могу оптимизировать это, так что я делаю только один вызов для загрузки изображения и деталей (учитывая, что запросы должны быть максимально сведены к минимуму).
Спасибо,
loadInBackground не инициируют запрос? –
Если по запросу вы имеете в виду запрос, который будет учитываться в ваших запросах Parse, тогда да, но это будет так же, как вы показали. – pbush25
Да, действительно, именно поэтому я хотел знать, есть ли способ уменьшить запрос ... то, что я вижу в вашей рекомендации, - это другой подход, а не минимизация запросов. –