当用户登录时,我需要加载他们的信息和数据。在 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 的行并向我提供信息,但我猜它并没有这样做。
最佳答案
Parse 使这变得极其简单。首先让我们回顾一下您已经巧妙讨论过的一些要点:
When a user logs in I need to load their information & data. In Parse, I use the
signUpInBackgroundWithBlock
method to setup an account. I am not sure how I retrieve that information when they log in.
这是一个好的开始。你走在正确的轨道上。一旦他们成功注册,您就不需要做太多其他事情了。因为您正在使用该方法,所以您拥有对象,对象(包含他们的所有信息:用户名、电子邮件、密码等)。因为您使用的是 block
,所以您有一个回调
,这就是您检索他们的信息的方式。这一切都在同一个方法中完成,无需创建另一个实例来提供已经给出的内容。它看起来像这样:
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
。缓存的任何内容本质上都意味着它存储在用户设备上,并且即使在应用程序终止时也会持续存在。在这种情况下,它会在 session 成功启动后立即缓存。它不会通过应用程序删除和重新安装而持续存在,但它会缓存在您的设备上,因此您可以在任何情况下调用它。因此,在您的 signUpInBackgroundBlock
回调中,或者在他们注册后的不同 View Controller 中的真正任何地方中,为了查看已登录用户的信息,您只需调用 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
类中创建了一个字符串类型的列来存储用户的电话号码。然后您将必须创建一个查询来检索该信息。否则,您始终可以使用简化的缓存信息在任何 View Controller 中显示它。
简单的用户查询看起来像这样:
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
}
}
关于ios - 登录Parse后加载账户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382148/