Получение имени пользователя Parse

У меня есть код, который я пытаюсь получить имя пользователя 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") }
}

person trever    schedule 27.02.2016    source источник
comment
Вы подклассы тогда? Показать детали.   -  person Wain    schedule 27.02.2016


Ответы (2)


Когда вы извлекаете объекты из 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. Это действительно ничего не делает :)

person Tomasz Pikć    schedule 27.02.2016

если вы хотите напечатать имя пользователя из запроса, оно должно быть из возвращаемого объекта, в вашем случае userData, и вы уверены, что у вас нет точки останова в вашем коде, если он просто остановится?

self.userNameTextField.text = userData.username
person Mazel Tov    schedule 27.02.2016