获取 Parse 用户的用户名
Getting username of Parse user
我有代码试图获取 PFUser 的用户名。我得到了用户并能够打印出来,但是当我到达用户名行时,代码就停止了。没有崩溃,只是停止 运行?
知道它为什么会那样做吗?
print(employeeObject)
firstName.text = employeeObject.firstName
lastName.text = employeeObject.lastName
if employeeObject.roleType != nil {
roleLabel.text = employeeObject.roleType?.roleName
}
if employeeObject.objectForKey("userPointer") != nil {
employeeObject.userPoint = employeeObject.objectForKey("userPointer") as! PFUser
}
if employeeObject.userPoint != nil {
let userID = employeeObject.userPoint!.objectId!
let query = PFUser.query()
query?.whereKey("objectId", equalTo: userID)
query?.getFirstObjectInBackgroundWithBlock({ (userData : PFObject?, error : NSError?) in
print(userData)
self.userLoginSwitch.setOn(true, animated: false)
self.userNameTextField.text = self.employeeObject.userPoint?.username!
self.passwordTextField.text = ""
self.emailAddressTextField.text = self.employeeObject.userPoint!.email
if self.employeeObject.userPoint!.objectForKey("isAdmin") as! Bool {
self.adminSwitch.setOn(true, animated: false)
}
})
}
if employeeObject.active {
disableEnableEmployee.setTitle("Disable Employee", forState: .Normal)
} else {
disableEnableEmployee.setTitle("Enable Employee", forState: .Normal)
disableEnableEmployee.setTitleColor(UIColor.blueColor(), forState: .Normal)
}
我将 userPoint 转换为 PFUser,然后在 Parse 中我将其指向用户 table,当我打印时。我可以看到所有的信息。它只是停止工作思想,没有错误或解释。
var userPoint : PFUser? {
get {return objectForKey("userPointer") as? PFUser}
set { setObject(newValue!, forKey: "userPointer") }
}
如果你想从查询中打印用户名,它必须来自返回的对象,在你的情况下是 userData 并且你确定你的代码中没有任何断点,如果它只是停止?
self.userNameTextField.text = userData.username
当您从 Parse 指针中获取对象时,默认情况下不包括对象。只有 PFObject
和 objectId
。如果你想包含指针的所有属性,你需要使用带有指针名称的 includeKey
方法。因此,如果您从查询中获得 employeeObject
(较早的某个地方),您应该添加行:
employeeQuery.includeKey("userPointer")
在此解决方案中,您不需要再次获取此用户,因为它是同一个对象。
@Mazels 的答案是第二种解决方案。您通过 objectId
获得相同的用户,因此您可以从 usedData
读取数据
self.userNameTextField.text = userData["username"]
self.emailAddressTextField.text = userData["email"]
if userData["isAdmin"] as! Bool { ...
最后一件事:
if employeeObject.objectForKey("userPointer") != nil {
employeeObject.userPoint = employeeObject.objectForKey("userPointer") as! PFUser
}
这是多余的。查看 userPoint
和此 if
语句的实现。它真的什么都不做:)
我有代码试图获取 PFUser 的用户名。我得到了用户并能够打印出来,但是当我到达用户名行时,代码就停止了。没有崩溃,只是停止 运行?
知道它为什么会那样做吗?
print(employeeObject)
firstName.text = employeeObject.firstName
lastName.text = employeeObject.lastName
if employeeObject.roleType != nil {
roleLabel.text = employeeObject.roleType?.roleName
}
if employeeObject.objectForKey("userPointer") != nil {
employeeObject.userPoint = employeeObject.objectForKey("userPointer") as! PFUser
}
if employeeObject.userPoint != nil {
let userID = employeeObject.userPoint!.objectId!
let query = PFUser.query()
query?.whereKey("objectId", equalTo: userID)
query?.getFirstObjectInBackgroundWithBlock({ (userData : PFObject?, error : NSError?) in
print(userData)
self.userLoginSwitch.setOn(true, animated: false)
self.userNameTextField.text = self.employeeObject.userPoint?.username!
self.passwordTextField.text = ""
self.emailAddressTextField.text = self.employeeObject.userPoint!.email
if self.employeeObject.userPoint!.objectForKey("isAdmin") as! Bool {
self.adminSwitch.setOn(true, animated: false)
}
})
}
if employeeObject.active {
disableEnableEmployee.setTitle("Disable Employee", forState: .Normal)
} else {
disableEnableEmployee.setTitle("Enable Employee", forState: .Normal)
disableEnableEmployee.setTitleColor(UIColor.blueColor(), forState: .Normal)
}
我将 userPoint 转换为 PFUser,然后在 Parse 中我将其指向用户 table,当我打印时。我可以看到所有的信息。它只是停止工作思想,没有错误或解释。
var userPoint : PFUser? {
get {return objectForKey("userPointer") as? PFUser}
set { setObject(newValue!, forKey: "userPointer") }
}
如果你想从查询中打印用户名,它必须来自返回的对象,在你的情况下是 userData 并且你确定你的代码中没有任何断点,如果它只是停止?
self.userNameTextField.text = userData.username
当您从 Parse 指针中获取对象时,默认情况下不包括对象。只有 PFObject
和 objectId
。如果你想包含指针的所有属性,你需要使用带有指针名称的 includeKey
方法。因此,如果您从查询中获得 employeeObject
(较早的某个地方),您应该添加行:
employeeQuery.includeKey("userPointer")
在此解决方案中,您不需要再次获取此用户,因为它是同一个对象。
@Mazels 的答案是第二种解决方案。您通过 objectId
获得相同的用户,因此您可以从 usedData
self.userNameTextField.text = userData["username"]
self.emailAddressTextField.text = userData["email"]
if userData["isAdmin"] as! Bool { ...
最后一件事:
if employeeObject.objectForKey("userPointer") != nil {
employeeObject.userPoint = employeeObject.objectForKey("userPointer") as! PFUser
}
这是多余的。查看 userPoint
和此 if
语句的实现。它真的什么都不做:)