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

时间:2014-11-20 21:22:41

标签: parse-platform

我使用PFObject.saveAllInBackground()在Parse数据库中创建了一堆新对象。这些是数据库中尚不存在的新对象。

创建完成后,我需要在我的本地应用数据库中跟踪他们的objectId,以便稍后更新。

使用saveAll()几乎是一个要求,因为循环遍历1000+对象并单独保存它们会很慢并且它会压倒Parse后端。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

当您使用saveAllInBackground(与saveInBackground类似)时,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无效,因为Parse在这里提到: https://parse.com/questions/saveallinbackground-and-deleteallinbackground-results-if-partial-fail

如果所有对象都已保存/删除,则返回YES if-and-only。如果只有部分对象成功或没有成功,那么它将返回NO,并且某些对象可能已成功而其他对象失败。 因此saveAllInBackground不进行原子保存。