Swift无法更新Parse对象

时间:2016-01-04 17:49:51

标签: ios swift parse-platform

我遇到了问题,我真的可以帮忙..

我有下面的方法,一切正常,直到第907行..当涉及到object3.saveInBackgroundWithBlock时,它什么也没做。甚至没有错误!它永远不会保存对象,它永远不会进入块内..

知道为什么吗?

func addUserToThoseIFollow(sender: UIButton) {
    //self.navigationItem.rightBarButtonItem?.enabled = false
    sender.enabled = false

    let userQuery = PFQuery(className: "_User")
    let userQuery2 = PFQuery(className: "_User")

    userQuery.getObjectInBackgroundWithId(PFUser.currentUser().objectId) { (object: PFObject!, error: NSError!) -> Void in
        if error == nil {

            // If I already follow some users, make
            // an array with them, add the user I
            // want to follow and save. Else,
            // just save an array, with that one user.

            if object["following"] != nil {
                var thoseIFollow = object["following"] as! [String]
                thoseIFollow.append(self.userID!)

                object["following"] = thoseIFollow
            }
            else {
                var myUsers = [String]()
                myUsers.append(self.userID!)

                object["following"] = myUsers 
            }

            object.saveInBackgroundWithBlock({ (ok: Bool, error2: NSError!) -> Void in
                if error2 == nil {
                    self.followButton.setTitle("Unfollow", forState: .Normal)
                    self.followButton.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.7)

                    sender.enabled = true

                    self.doIFollow = true
                }
            })
        }
    }

    // Add me to his followers

    userQuery2.getObjectInBackgroundWithId(self.userID) { (object3: PFObject!, error3: NSError!) -> Void in
        if error3 == nil {
            // If the user I just followed, has already followers, make
            // an array with them and add the current user to
            // them. Else, just save an array, with the current user.

            if object3["followers"] != nil {
                var hisFollowers = object3["followers"] as! [String]

                hisFollowers.append(PFUser.currentUser().objectId)
                object3["followers"] = hisFollowers

               /* Line 907 */ object3.saveInBackgroundWithBlock({ (ok7: Bool, error7: NSError?) -> Void in // Line 907
                    if error7 == nil {
                        print("ok")
                    }
                    else {
                        print(error7)
                    }
                })
            }
            else {
                var hisFollowers = [String]()

                hisFollowers.append(PFUser.currentUser().objectId)
                object3["followers"] = hisFollowers

                object3.saveInBackgroundWithBlock( { (ok5: Bool, error7: NSError!) -> Void in
                    print("otinanai")

                    if error7 != nil {
                        print(error7.localizedDescription)
                    }
                })
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

尝试#1

PFUser.currentUser().objectId返回什么?如果它返回nil,那么它就不起作用。

尝试#2

Available Parse Types

到目前为止,我们已经使用了NSString,NSNumber和PFObject类型的值。 Parse还支持NSDate和NSNull。 您可以嵌套NSDictionary和NSArray对象,以在单个PFObject中存储更多结构化数据。

尝试使用var hisFollowers = [NSString]()代替var hisFollowers = [String]()

答案 1 :(得分:0)

self.userID

究竟是从哪里来的? 您的支票是否可选?

答案 2 :(得分:0)

注释掉第一个查询并查看它是否有效。

每个Parse对象一次只能运行一个后台线程。假设您保存一个对象,然后立即在下一行(不在其回调内),编辑它然后再次保存。由于第一次保存仍在运行,因此不会调用第二次保存。你甚至没有收到错误。无法通知此调用未发生任何通知。

我的猜测是你在第一个查询和第二个查询中都保存了对象,因此,第二个查询的保存被跳过了。

解决方案是将第二个查询放在第一个回调中。

我认为你可以下载一个PromiseKit库,它可以在iOS中添加javascript功能,使它更类似于你在云代码中链接这些调用的方式,但我还没有使用它。