如何使用 swift 从 Parse 上的用户指针中检索数据

Posted

技术标签:

【中文标题】如何使用 swift 从 Parse 上的用户指针中检索数据【英文标题】:how to retrive data from a user pointer on Parse using swift 【发布时间】:2015-11-15 11:29:02 【问题描述】:

在 Parse 上,我的用户拥有 Facebook 个人资料和电子邮件登录个人资料。所以我想在我的类似推特的应用程序中隐藏用户数据。

在 Parse 的 "messages" 类中,我有 column "sender",其中包含用于解析用户的 指针

我只想检索并显示 "messages" 列中包含的用户名,该类包含在 "sender" 列中,其中包含指向 PFUsers 的指针,我需要其中的键数据

“名字” “姓氏” “profile_picture”

我如何检索他们的数据,如名称和图像,以便在表格视图中显示它们?

这些是我的数组的声明:

var sendersArray : [String] = []
var picturesArray : [NSData] = []

也许我可以使用类似这个元组的东西,但我不明白如何从指针中获取数据

for user in list  

    let firstName = "fist_name"
    let lastName = "last_name"
    let oProfileImage = NSData() //"image_profile" as! NSData

    otherUsers.append((oName: firstName, oLastName: lastName, oImageProfle: oProfileImage))


版本 - 1:

我从打印整个 pf 对象开始

//******************************************************

func theSearch() 



    let theSearchQuery = PFQuery(className: "Messages")


    theSearchQuery.findObjectsInBackgroundWithBlock(
        (objects : [AnyObject]?, error : NSError?) -> Void in

        for object in objects!  

            let theName = object.sender!

            print(object)
            print(theName)

            sendersArray.append(theName)

            let profilePicture = object["profile_pic"] as! PFFile
            picturesArray.append(profilePicture)

        

        self.tableView.reloadData()

    )


//*******************************************************

版本 - 2:

然后,找到了这个解决方案,但仍然没有

func theSearch() 



    let theSearchQuery = PFQuery(className: "Messages" )

     theSearchQuery.includeKey("sender")

    theSearchQuery.findObjectsInBackgroundWithBlock(
        (objects : [AnyObject]?, error : NSError?) -> Void in

        for object in objects!  

            let theName = object.sender!["first_name"] as? String

            print(object)
            print(theName)

            sendersArray.append(theName)

            let profilePicture = object["profile_pic"] as! PFFile
            picturesArray.append(profilePicture)

        

        self.tableView.reloadData()

    )


错误:

好像是发件人的问题,也许我不应该用它

提前致谢

【问题讨论】:

您的最后一个解决方案应该有效。会发生什么? 用代码和错误更新了问题,问题:无法正确解包数据,名称似乎设置不正确。 【参考方案1】:
  let theName = object.objectForKey("sender")!.objectForKey("first_name") as! String

完整代码:

   func theSearch() 



let theSearchQuery = PFQuery(className: "Messages")

 theSearchQuery.includeKey("sender")
 theSearchQuery.findObjectsInBackgroundWithBlock(
    (objects : [AnyObject]?, error : NSError?) -> Void in

    for object in objects!  

        let theName = object.objectForKey("sender")!.objectForKey("first_name") as! String

        print(object)
        print(theName)

        self.sendersArray.append(theName)

        let profilePicture = object["profile_picture"] as! PFFile
        self.picturesArray.append(profilePicture)

    

    self.tableView.reloadData()

   )


另外,你的 picturesArray 应该是 PFFile 类型,像这样:

 var picturesArray = [PFFile]()

不是 NSData。在班级顶部更改它。

-----编辑------: 如果要从解析查询中检索图像,请执行以下操作:

1) 在类的顶部,声明以下数组来存储结果:

    // your images will be stored in the file array
    var fileArray = [PFFile]()

  // your first and last names will be stored in String Arrays:
  var firstNameArray = [String]()
  var lastNameArray = [String]()

2) 执行查询:

   let query1 = PFQuery(className: "_User")
   query1.orderByDescending("createdAt")
   query1.findObjectsInBackgroundWithBlock(
      (objects : [AnyObject]?, error : NSError?) -> Void in
         if error == nil 
           for x in objects! 
             let firstName = x.objectForKey("first_name") as! String
             let lastName = x.objectForKey("last_name") as! String
             self.firstNameArray.append(firstName)
             self.lastNameArray.append(lastName)

            if x.objectForKey("profile_picture") as? PFFile == nil  
               print("do nothing cause it's nil")
            
           else 
              let file:PFFile = x.objectForKey("profile_image") as! PFFile
              self.fileArray.append(file)
            


             
            self.tableView.reloadData()

         

    )

注意我使用的是 Swift 2 和 Xcode 7。Xcode 6.4 和 Swift 1.2 的语法略有不同。

【讨论】:

// 更新 - 问题是,如果用户通过解析登录,在 User 类中,给定键根本没有数据!但会用username 改变数组类型。用户通过 Facebook 和 Parse 本身登录(以这种方式,提供电子邮件但不提供图像)所以是的,我也想检索图像,如果有的话,那么,如果没有该发件人的图像,我们该如何处理轮廓? (事实上​​你的代码给了我一个关于解开可选值的错误) 你能告诉我如何在你自己的版本中检索图像吗?不知道如何在UIImage 中转换并放入数组中。这样,我可以将您的答案标记为完整! 好的,让我试着理解一下。您不想从指针中检索图像,而是直接从您正在查询的类中检索图像,有时该列有一个图像文件,有时它没有(所以有时图像文件为零)。那是对的吗?如果是这样,是的,我知道该怎么做,只是在我发布答案之前确保 是的,我尝试解释 :) 在另一个查询中,我从“消息”类中检索对象、消息、日期,将它们放入数组中并显示在表格视图中。现在,我想添加更多信息,为了让我保持简单,我正在制作这个新查询。再次在“消息”中,我有“发件人”列(如您所知,是指向用户的指针)和“发件人昵称”。如果您通过 Facebook 登录,您的全名和图像将存储在指针中(这就是我的理解,如果我错了,请纠正我)所以是的,您应该理解 :) 你想查询用户类的名字和头像吗?

以上是关于如何使用 swift 从 Parse 上的用户指针中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Parse (Swift 3) 注册用户时如何添加头像

Swift,parse.com:如何从查询中传递数据

使用 Parse 和 Swift 的一个键上的两个查询约束

如何从 Facebook + Swift + Parse 获取封面照片

如何将 iOS Swift 应用程序指向 Amazon Web Services 上的 Parse Server?

IOS 如何使用 Parse Swift 获取每个用户的个人资料图片