如何使用 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 的指针,我需要其中的键数据
我如何检索他们的数据,如名称和图像,以便在表格视图中显示它们?
这些是我的数组的声明:
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) 注册用户时如何添加头像
如何从 Facebook + Swift + Parse 获取封面照片