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

PFUser currentUser saveInBackgroundWithBlock completes succeeded without even trying

我正在尝试更改登录用户。我像往常一样进行更改,然后调用:

[[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。保存完成块 returns 的那一刻,那个钥匙就不见了。 `(元是我在用户处的通用 JSON 对象,元键中的其他值保留没有问题)。我的更改也没有反映到服务器端。

第一个怀疑是 beforeSave 触发器,但是在我的触发器中绝对没有任何与 meta 键相关的东西,所以事实并非如此。为什么会这样?

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

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

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

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

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

最后一行是关键。我正在分配给 Parse 对象的 "myArray" 字段,这导致 Parse 将我的用户标记为脏。然后,当我保存的时候,因为它是脏的,它实际上是将我的用户保存到服务器上,并且有效。