PFUser currentUser saveInBackgroundWithBlock完成成功,甚至没有尝试

时间:2015-07-09 23:56:21

标签: parse-platform ios8 pfuser

我正在尝试更改登录用户。我像往常一样进行更改,并致电:

[[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *PF_NULLABLE_S error){
    if(succeeded){
        NSLog(@"Saved user successfully.");
    }else{
        NSLog(@"Unable to save user: %@", error);
    }
}];

它成功保存,但我的更改已经消失。在保存之前,我的用户对象有这个键:

.meta.acceptsAllMessages = 1。保存完成块返回的那一刻,该键消失了。 `(meta是我在用户的通用JSON对象,并且元键中的其他值保留没有问题)。我的更改也没有反映到服务器端。

第一个嫌疑人是beforeSave触发器,但是我的触发器中的meta键完全没有任何关系,所以情况并非如此。为什么会这样?

更新:似乎存在更深层次的问题。我完全保存了其他东西,并遇到了同样的问题。我已启用飞行模式,我想保存当前用户,并立即调用完成处理程序,成功设置为YES,错误设置为nil,没有互联网连接。我已经仔细检查过我使用的是saveInBackgroundWithBlock:而不是saveEventually。为什么会这样?

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。 我在我的用户对象中添加了一个对象,没有分配属性本身。在最近的例子中,我做了类似的事情:

[[PFUser currentUser][@"myArray"] addObject:@"something"];
[[PFUser currentUser] saveInBackground...];

因为我本身没有分配任何对象,[我的假设是] Parse认为我的用户对象不是脏的,并且它甚至没有尝试保存就立即完成。我已经解决了这个问题:

NSMutableArray *array = [PFUser currentUser][@"myArray"];
[array addObject:@"something"];
[PFUser currentUser][@"myArray"] = array;

最后一行是关键。我分配给了#34; myArray" Parse对象的字段,它导致Parse将我的用户标记为脏。然后,当我保存时,因为它很脏,它实际上将我的用户保存到服务器,并且它可以工作。