当用户登录时,我需要加载他们的信息&数据。在Parse中,我使用signUpInBackgroundWithBlock
方法设置帐户。我不确定如何在登录时检索该信息。我尝试了以下代码但没有成功:
class Klikur: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var loadUser = PFQuery(className:"GameScore")
loadUser.getObjectInBackgroundWithId("xWMyZEGZ") {(gameScore: PFObject?, error: NSError?) -> Void in
if error == nil && gameScore != nil {
println(gameScore)
} else {
println(error)
}
}
我做错了什么?我认为它将使用该ID拉出行并向我提供信息,但我想它并没有这样做。
答案 0 :(得分:1)
Parse使这个变得非常简单。首先让我们回顾一下您巧妙讨论的一些主要关键点:
当用户登录时,我需要加载他们的信息&数据。在Parse中,我使用
signUpInBackgroundWithBlock
方法设置帐户。我不确定如何在登录时检索该信息。
这是一个好的开始。你走在正确的轨道上。成功注册后,您无需做太多其他事情。因为您正在使用该方法,所以您拥有对象,对象(包含所有信息:用户名,电子邮件,密码等)。由于您使用的是block
,因此您拥有callback
,这就是您检索信息的方式。这一切都在同一个方法中完成,不需要创建另一个实例来提供已经给出的内容。它看起来像这样:
user.signUpInBackgroundWithBlock {
(succeeded: Bool, error: NSError?) -> Void in
if error == nil {
// do something if there is an error signing up
} else {
// You have a successful log in. Which means you now have a cached user on device
}
}
那么一旦他们注册,你如何获得任何用户字段?通过调用缓存用户或currentUser
。缓存的任何东西本质上意味着它存储在用户设备上,并且即使通过应用程序终止也会持续存在。在这种情况下,一旦会话成功启动,它就会被缓存。它不会通过应用程序删除和重新安装持续存在,但它会缓存在您的设备上,因此您可以在任何情况下调用它。因此,在您注册后,在其他视图控制器中的signUpInBackgroundBlock
回调或任何地方中,为了查看已登录的用户信息,您只需拨打currentUser
即可可以检索所有参数。像这样:
if error = nil {
} else {
var currentUser = PFUser.currentUser() //This gets the current user where you can get information like
var userObjectId = currentUser.objectId //returns the current users objectId
var userUsername = currentUser.username //returns username
}
如果您想从User
类中获取自定义字段,那么您将不得不执行查询,您甚至可能不会对缓存版本感到烦恼,因为您已经耗尽了要检索的API请求自定义字段值。假设您在User
类中创建了一个列类型String,用于存储用户的电话号码。然后,您必须创建一个查询来检索该信息。否则,您始终可以使用简化的缓存信息在任何视图控制器中显示它。
简单的用户查询将如下所示:
var query = PFUser.query() //NOTICE there is no classname, this is the proper way to query the User class, no matter what you see elsewhere.
query.whereKey("username", equalTo:PFUser.currentUser().username)
query.getFirstObjectInBackgroundWithBlock {
(user : PFUser?, error: NSError?) -> Void in
if user == nil {
println("No user with that username")
} else {
//retrive your special column data
let userPhoneNumber = user["PhoneNumberColumnName"] as String
}
}
答案 1 :(得分:0)
正如Milo526所说,如果用户已创建并登录,
let user = PFUser.currentUser()
将返回该用户的数据。
但是,如果您的查询是针对类User但您将className设置为“gameScore”,则查询将无法通过查找并返回错误。
尝试:
var loadUser = PFQuery(className:"User")
loadUser.getObjectInBackgroundWithId("xWMyZEGZ") {
}
确保xWMyZEGZ是一个在Parse上的User表中有效的objectId。