Swift Parse:无法在_User类中检索bool的值

时间:2015-04-23 00:02:24

标签: ios iphone swift parse-platform

我正在使用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

以下是我刚刚对服务器端进行的截图: can't get bool from Parse

谢谢大家的关注

3 个答案:

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

我知道这可能听起来很奇怪,但是有些人在几个小时之后就挣扎着意识到我的愚蠢错误。所以回到当前任务并在几小时后重新检查总是好的。因此,请务必仔细检查以下内容:

  • 密钥"已修改"在主用户类的解析
  • 您可以检索其他键值(只是为了查看除了当前检索键值bool值之外是否还有其他错误(

虽然我使用的是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"

希望这有帮助。