ios - 登录Parse后加载账户信息

标签 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 的行并向我提供信息,但我猜它并没有这样做。

最佳答案

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/

相关文章:

iphone - 通过 IOS 应用程序登录 Facebook 重定向到空白页面

ios - 如何重置和切换 API 凭据

ios - 1833 行 : Extra content at the end of the document when opening storyboard

ios - 在 ViewController 中向 UITableView 添加数据/行。 swift

ios - PFArrayResultBlock(parse) 在转换为 swift 2.0 时导致错误

ios - 如何从子类 UITableViewCell 调用 didSelectRowAtIndexPath

iOS In App Purchase购买多种产品

ios - 如何在 Swift 5.0/Xcode 中使用🧨 强制解包

java - 错误 :(31, 39) 错误:找不到符号变量上下文

ios - 解析查询在只有一个对象时发现两个对象