我正在使用swift和Parse开发一个应用程序。由于某些原因,我实施了一个名为"修改过的Bool"在_User类中。我一直在玩swift和Parse几个月但这只是没有意义。
当我尝试检索"修改"的值时Bool我继续得到" false"即使它设置在" true"在Parse服务器上。这是代码:
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建议之后,我尝试通过实现此代码来更新设备上的当前用户实例:
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
以下是我刚刚对服务器端进行的截图:
谢谢大家的关注
答案 0 :(得分:1)
我不确定你使用的是什么版本的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
我知道这可能听起来很奇怪,但是有些人在几个小时之后就挣扎着意识到我的愚蠢错误。所以回到当前任务并在几小时后重新检查总是好的。因此,请务必仔细检查以下内容:
虽然我使用的是Swift 2.0,但是当从Swift 1.2迁移到Swift 2.0时,确实没有从这个特定代码中发生重大变化。
只是看看它是否仍然无效,我们可以就您的设置进行更多讨论。
答案 1 :(得分:0)
我已将“doneSetUp”var初始化为局部变量,它是一个int。 然后我查询刚刚登录的用户 检查它是否存在...... 检查变量userDidSetUp是否存在于解析中,如果是,我将它转换为int并将其分配给我制作的局部变量doneSetUp 然后我使用“doneSetUp”变量,该变量现在具有值0(假)或1(真),以决定用户是否已经设置了他的帐户,然后将用户转移到正确的视图控制器。 提到所有这些代码都在我的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)
}
}
}
})
答案 2 :(得分:0)
我知道这是一个老帖子,但这对我有用。 这是在viewDidLoad方法中。
PFUser.currentUser()?.fetchInBackgroundWithBlock({ (object, error) -> Void in
var modified = PFUser.currentUser()?.objectForKey("modified")?.boolValue
if modified == true {
print(modified) // Output console displays "true"
希望这有帮助。