iOS Swift & Parse - getDataInBackground 不工作?

Posted

技术标签:

【中文标题】iOS Swift & Parse - getDataInBackground 不工作?【英文标题】:iOS Swift & Parse - getDataInBackground not working? 【发布时间】:2017-07-23 19:21:14 【问题描述】:

目前正在学习 Swift 和 ios。我尝试使用 Parse 访问保存的图片。但是,我无法使用getDataInBackground(block:) 访问它。

这是我的代码:

//
//  ViewController.swift
//  Instragram
//
//  Created by Macbook Pro on 22.07.17.
//  Copyright © 2017 Macbook Pro. All rights reserved.
//

import UIKit
import Parse

class ViewController: UIViewController 
    @IBOutlet weak var picture: UIImageView!
    @IBOutlet weak var senderLbl: UILabel!
    @IBOutlet weak var recieverLbl: UILabel!
    @IBOutlet weak var messageLbl: UILabel!

    override func viewDidLoad() 
        super.viewDidLoad()

        // Creating tables and data in database
        let imageData = UIImageJPEGRepresentation(picture.image!, 0.5)

        let file = PFFile(name: "picture.jpg", data: imageData!)

        let table = PFObject(className: "messages")
        table["sender"] = "Akhmed"
        table["reciver"] = "Bob"
        table["picture"] = file
        table["message"] = "Hello!"
        table.saveInBackground (success, error) -> Void in
            if(success)
                print("Saved successful")
             else 
                print(error!)
            
        

        //Recieving Data from the Server
        let information = PFQuery(className: "messages")
        information.findObjectsInBackground(objects: [PFObject]?, error) -> Void in
            if error == nil 
                for object in objects!
                    self.senderLbl.text = object["sender"] as? String
                    self.recieverLbl.text = object["reciver"] as? String
                    self.messageLbl.text = object["message"] as? String

                    object["picture"].getDataInBackground(...)
                
             else 
                print(error!)
            
        
    

在我访问名称、接收者和消息字符串后,我尝试访问已保存在服务器上的图像:

object["picture"].getDataInBackground(block:) 

但是,在我输入 object["picture"] 之后,Swift 甚至不再自动更正。我也收到一个错误:

'“Any”类型的值没有成员'getDataInBackground(block:)'

任何想法有什么问题吗?在我看来,即使图像保存在服务器上的字符串“图片”下,Swift 也找不到字符串 picture

【问题讨论】:

读取错误。 object["picture"]Any,而不是更具体的类。你需要一个演员在那里。 【参考方案1】:

您需要先将其转换为PFFfile 对象,然后使用getDataInBackground 函数检索实际图像数据,如下所示:

let imageFile = object["picture"] as? PFFile
imageFile?.getDataInBackground (block:  (data, error) -> Void in
      if error == nil 
                     if let imageData = data 
                         self.myImage = UIImage(data:imageData)
                     
      
)

【讨论】:

这很有帮助,虽然我不得不改变两件事,但效果很好。谢谢

以上是关于iOS Swift & Parse - getDataInBackground 不工作?的主要内容,如果未能解决你的问题,请参考以下文章

Swift & Parse:UISearchbar 不起作用

如何使用 Parse & Swift 存储帖子的评论?

Parse & Swift - 如何减少服务器负载/请求?

如何为经典的帖子和评论模型构建 Parse 数据模型? (使用 iOS、Swift、Parse)

Facebook SDK v4 & Parse (Swift)

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)