登录Parse后加载帐户信息

时间:2015-09-03 17:38:39

标签: ios swift parse-platform

当用户登录时,我需要加载他们的信息&数据。在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拉出行并向我提供信息,但我想它并没有这样做。

2 个答案:

答案 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。