如何在 Swift 中同步检索 PFUser objectForKey
Posted
技术标签:
【中文标题】如何在 Swift 中同步检索 PFUser objectForKey【英文标题】:How to synchronously retrieve PFUser objectForKey in Swift 【发布时间】:2017-05-12 00:14:19 【问题描述】:我正在尝试同步检索 PFUser 对象信息。但是,我尝试过使用 fetch,但我不断收到实现错误。我想找到例如:PFUser.currentUser()?.objectForKey("scoreNumber"),但我没有得到更新的值。有人告诉我我会使用 fetch 找到它,但我无法在我的 fetch 函数中实现 objectForKey。
一些尝试
var score: String!
func retrieveScore()
guard let myUser = PFUser.currentUser() else return
do let data = try myUser.objectForKey("scoreNumber")?.fetch()
try scoreNumber = data! as! String
catch
另一个
let userScore = PFUser.currentUser()?.objectForKey("scoreNumber")
let userScore2 = userScore.fetch()
【问题讨论】:
您确定您有一个已登录的用户吗? @ZonilyJame 是的,我用 NSUserDefaults 保存用户。 【参考方案1】:您不应该为 NSUserDefaults 保存用户。 Parse SDK 可以很好地为您管理会话。只需有一个调用 [PFUser logout]` 功能的特定注销按钮。
所以,fetch 是一个异步操作。这意味着它运行在一个单独的线程上,然后主线程将继续执行下一个命令。因此,您正在调用 fetch,它在后台获取一个对象,但随后您正试图从尚未获取的对象中访问一个值。您需要从处理 fetch 调用结果的块中访问对象。
当您以您的方式调用 fetch 时,只需使用 .fetch()
,它会在后台运行,但不会在您有数据时提醒您,也不会在 fetch 失败时提醒您。这不是立即获取您需要的数据的好方法。
你需要使用fetchInBackgroundWithBlock()
scoreNumber.fetchInBackgroundWithBlock()
(scoreNumber: PFObject?, error: NSError?) -> Void in
if error == nil && scoreNumber != nil
print(scoreNumber)
else
print(error)
【讨论】:
以上是关于如何在 Swift 中同步检索 PFUser objectForKey的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中注册使用 ParseUI 的 Facebook 按钮登录的 PFUser?
如何在 Swift 上将 Parse `PFUser` 从`MapView` 传递(抓取)到另一个`ViewController`?
在 Swift 中链接/合并 Facebook 用户和 PFUser(解析)
无法将类型 (PFUser!, NSError) void 的值转换为预期的参数类型 PFUserResultBlock