获取Parse用户的用户名

时间:2016-02-27 07:39:54

标签: swift parse-platform pfuser

我有代码,我正在尝试获取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中我指向User表,当我打印时。我可以看到所有的信息。它只是停止了工作思路,没有任何错误或解释。

var userPoint : PFUser? {
    get {return objectForKey("userPointer") as? PFUser}
    set { setObject(newValue!, forKey: "userPointer") }
}

2 个答案:

答案 0 :(得分:0)

如果你想从查询中打印用户名,它必须来自返回的对象,在你的情况下是userData,如果它刚停止,你确定代码中没有任何断点吗?

self.userNameTextField.text = userData.username

答案 1 :(得分:0)

默认情况下,不包括从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语句的实现。它什么都不做:)