Parse platform 处理PFObject.saveAll()的部分成功

Parse platform 处理PFObject.saveAll()的部分成功,parse-platform,Parse Platform,我正在使用PFObject.saveAllInBackground在解析数据库中创建一组新对象。这些是数据库中尚不存在的新对象 创建它们之后,我需要在本地应用程序数据库中跟踪它们的objectId,以便以后更新它们 使用saveAll几乎是一项要求,因为循环1000+个对象并单独保存它们的速度很慢,并且会淹没解析后端 saveAll的结果是布尔值:它告诉我整个操作是否成功 但是,当它返回一个失败,其中一个NSError对象告诉我出了什么问题时,这些对象中的一些可能已经在服务器上成功创建 在这种情

我正在使用PFObject.saveAllInBackground在解析数据库中创建一组新对象。这些是数据库中尚不存在的新对象

创建它们之后,我需要在本地应用程序数据库中跟踪它们的objectId,以便以后更新它们

使用saveAll几乎是一项要求,因为循环1000+个对象并单独保存它们的速度很慢,并且会淹没解析后端

saveAll的结果是布尔值:它告诉我整个操作是否成功

但是,当它返回一个失败,其中一个NSError对象告诉我出了什么问题时,这些对象中的一些可能已经在服务器上成功创建

在这种情况下,我想知道saveAll批处理中的哪些对象已成功创建并检索它们的objectId,因此在再次尝试保存时不会复制它们


因此,我的问题是:当PFObject.saveAll失败时,我如何知道哪些对象已成功保存/创建(如果有)?

当您使用与saveInBackground类似的saveAllInBackground时,Parse将在您要保存的原始对象上填充objectId。见下文:

PFObject *userObject = [PFObject objectWithClassName:@"ClassName"];
[PFObject saveAllInBackground:@[userObject] block:^(BOOL succeeded, NSError *error) {
    NSLog(@"objectID %@", userObject.objectId); //ex: objectID C1w4kGNIfW
}];
另一种选择是使用以下方法创建您自己的id:

PFObject *userObject = [PFObject objectWithClassName:@"ClassName"];
NSString * uuidCustom = [[NSUUID UUID] UUIDString];
userObject[@"uuidCustom"] = uuidCustom;
[PFObject saveAllInBackground:@[userObject] block:^(BOOL succeeded, NSError *error) {
    //here make a Parse find using your custom UUIDs and see which one where saved. 
}];
更新: 选项1无效,因为此处提到:

当且仅当所有对象都已保存/删除时,它才会返回YES。如果只有部分对象成功或没有成功,那么它将返回NO,并且一些对象可能已经成功,而其他对象则失败。
因此,saveAllInBackground不会执行原子保存。

是的,但是当我保存一批对象并且只有少数对象成功创建时,它们的objectid没有设置。自定义uuid建议很有趣,但必须运行解析查询才能知道保存了哪些对象似乎不是一件好事,考虑到当Parse save命令失败时会发生这种情况,这可能意味着坏网络、超过配额、解析超时等。。。因此,查询失败的几率很高,我仍然不知道成功创建了哪些对象。因为你是说,即使对象保存在Parse上,Parse也没有设置objectID,这看起来像是一个Parse bug,你应该用Parse打开一个bug,你必须自己确定对象是否保存了。因此,您需要创建自己的唯一ID,UUID是一个很好的解决方案。关于超时,您可以使用要求Parse插入的记录创建一个本地数据库,并在进行另一次保存之前确认实际保存了哪些记录。我希望这能有所帮助。说得清楚一点:Parse确实在数据库中为已成功创建的对象设置objectId。但是当saveAll完成时,没有设置PFObject.objectId属性,但出现了一个错误。Pascal Bourque您找到了处理这种情况的方法吗?