我遇到了问题,我真的可以帮忙..
我有下面的方法,一切正常,直到第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)
}
})
}
}
}
}
答案 0 :(得分:0)
尝试#1
PFUser.currentUser().objectId
返回什么?如果它返回nil
,那么它就不起作用。
尝试#2
到目前为止,我们已经使用了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功能,使它更类似于你在云代码中链接这些调用的方式,但我还没有使用它。