我正在尝试更改登录用户。我像往常一样进行更改,并致电:
[[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
。为什么会这样?
答案 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将我的用户标记为脏。然后,当我保存时,因为它很脏,它实际上将我的用户保存到服务器,并且它可以工作。