斯威夫特解析:在_user
我正在开发使用SWIFT和分析应用程序无法检索一个布尔值。由于某些原因,我在_User类中实现了一个名为“modified”的Bool。我一直在玩Swift和Parse几个月,但这没有意义。斯威夫特解析:在_user
当我尝试找回价值的“修改”布尔我不断获取,即使它被设定为“真”解析服务器上的“假”值。下面是代码:
var modified: Bool = PFUser.currentUser().objectForKey("modified") as! Bool
println("User Modified Bool is set to: \(modified)")
我也试图与
self.modified = PFUser.currentUser().valueForKey("modified") as! Bool
println("User Modified Bool is set to: \(modified)")
和
self.modified = PFUser.currentUser()["modified"] as! Bool
println("User Modified Bool is set to: \(modified)")
我必须做具体的查询或有直接访问该值的方法?
编辑
我实现了一个特定的查询。仍然获得了 “假” 值虽然
var queryMainUser: PFQuery = PFUser.query()
queryMainUser.whereKey("username", equalTo: PFUser.currentUser().username)
queryMainUser.findObjectsInBackgroundWithBlock { (mainUsersObjects, mainUsersError) -> Void in
if (mainUsersError == nil) {
var theRef = mainUsersObjects[0] as! PFObject
self.modified = theRef["modified"] as! Bool
println("Any improvement? \(self.modified)")
}
}
编辑2
继@danh建议,我试图通过实施该代码更新设备上的currentuser实例:
var currentUser = PFUser.currentUser()
currentUser.fetchInBackgroundWithBlock { (object, error) -> Void in
println("Refreshed")
currentUser.fetchIfNeededInBackgroundWithBlock { (result, error) -> Void in
self.modified = currentUser.objectForKey("modified") as! Bool
var idOfUser: String = currentUser.objectId
println("User \(idOfUser) UPDATED")
println(self.modified)
if self.modified == true {
self.deleteData()
self.fetchAllObjects()
}
}
}
当运行控制台给我这个:
Refreshed
User xTbBw6cNzK UPDATED
false
下面是截图我只是把服务器端的:
谢谢大家的关注
我已经初始化了“doneSetUp” VAR作为一个局部变量,它是一个int。 后来我查询刚刚登录 检查用户是否存在... 检查变量userDidSetUp解析中存在,如果是这样,我将其转换为一个int并将其分配给我做 那么局部变量doneSetUp我使用的是“doneSetUp”变量,它现在有0(假)或1(真)的值来决定,如果用户已经安装了帐户或没有,然后Segue公司的用户到正确的视图控制器。 提到所有这些代码都在我的logininbackgroundwithblock函数中。 我希望有所帮助。
query?.getObjectInBackgroundWithId(user!.objectId!, block: {
(user, error) -> Void in
if let user = user{
if var userDidSetUp: AnyObject = user["doneSetUp"] {
self.doneSetUp = userDidSetUp as! Int
if self.doneSetUp == 0 {
self.performSegueWithIdentifier("procceedToSetup", sender: self)
}else{
self.performSegueWithIdentifier("procceedToApp", sender: self)
}
}
}
})
我不确定你使用的是什么版本的swift。但是如果你使用的是Swift 2.0和Xcode 7,那么应该这样做。
这是行不通的:
let modifiedStatus = PFUser.currentUser()?["modified"] // return value will be nil
这将肯定工作:
let modifiedStatus = PFUser.currentUser()?.objectForKey("modified")
print(modifiedStatus) // true as per your table
我知道这听起来很奇怪,但有些我的东西几个小时后实现我的愚蠢的错误作斗争。因此,回到目前的任务并且在几个小时后重新检查总是很好的。因此,只要确保你交叉检查以下内容:
- 的关键在主用户类的解析
- 您可以检索其他键值“修饰”(只是为了看看,如果没有别的比你目前的错误等一键布尔值的检索(
虽然我对雨燕2.0,但是可以肯定有一个从这个特定的代码,当涉及到移动从雨燕1.2至雨燕2.0没有发生重大变化。
刚看,如果它仍然不起作用,我们可以讨论更多的y我们的设置。
我知道这是一个旧帖子,但这里是对我有用。 这是在viewDidLoad方法中。
PFUser.currentUser()?.fetchInBackgroundWithBlock({ (object, error) -> Void in
var modified = PFUser.currentUser()?.objectForKey("modified")?.boolValue
if modified == true {
print(modified) // Output console displays "true"
希望这会有所帮助。
你确定它获取col的语法吗?也许用户过时了。标志设置在云中后,您需要使用某种形式的刷新(例如http://parse.com/docs/ios/api/Classes/PFObject.html#//api/name/refreshInBackgroundWithBlock :)为了使其最新。另外,请注意PFObject实现'isDirty()'这可能是您尝试创建的函数的内置版本。 – danh
hello @danh,谢谢你的回答。我看过你提到的'isDirty()'。但这不完全是我需要的。我使用“修改”bool来告诉用户刷新其朋友列表。当实现新的朋友关系时,这个布尔在服务器上被修改。 我很抱歉,但我并不完全明白你的意思是“过时”。 –
当前用户是数据库中用户的代理。如果您在云代码中更改了server-sdie用户的某个属性,则除非您进行刷新,否则不会由客户端副本(currentUser)表示。 – danh