我使用PFObject.saveAllInBackground()
在Parse数据库中创建了一堆新对象。这些是数据库中尚不存在的新对象。
创建完成后,我需要在我的本地应用数据库中跟踪他们的objectId
,以便稍后更新。
使用saveAll()
几乎是一个要求,因为循环遍历1000+对象并单独保存它们会很慢并且它会压倒Parse后端。
saveAll()的结果是布尔值:它告诉我整个操作是否成功。
但是,当它返回失败时(NSError
对象告诉我出了什么问题),有可能在服务器上成功创建了其中一些对象。
在这种情况下,我想知道我的saveAll()
批次中的哪些对象已成功创建并检索他们的objectId
,因此当我再次尝试保存时,我不会复制它们。
所以我的问题是:当PFObject.saveAll()
失败时,我如何知道哪些对象已成功保存/创建(如果有的话)?
答案 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不进行原子保存。