在CloudKit仪表板中,记录类型User有一个名为Boards的Reference (List)类型的字段,而记录类型Board有一个名为User的Reference类型的字段。这是一个代码示例,指示我如何尝试将Board链接到User
CKReference *reference = [[CKReference alloc] initWithRecord:userRecord action:CKReferenceActionDeleteSelf];
[boardRecord setObject:reference forKey:@"User"];如果在设置对象之前和之后使用NSLog(@"%@", [boardRecord objectForKey:@"User"]);,则在设置对象之前和之后都会得到(null)的结果,而之后是与User具有相同recordName的CKReference对象。但是在CloudKit仪表板中,Board不更新其User字段,User没有将引用添加到Boards引用列表中,因此,当我随后查询User以查找关联的Board时,不会收到任何结果。我不明白为什么引用是根据记录的内容正确设置的,但实际上并没有保存。
下面是用于保存到iCloud的代码:
+ (void)saveEntity:(CloudKitEntity *)entity completion:(void (^)(NSError * _Nonnull))completion {
[[self privateDatabase] saveRecord:entity.record completionHandler:^(CKRecord * _Nullable record, NSError * _Nullable error) {
if (completion) {
completion(error);
}
}];
}记录错误揭示了“服务器记录更改”的错误,我认为这意味着记录的服务器版本比本地版本更新。但我不知道该怎么办,因为我刚刚清理/重建,删除应用程序,重建/重新安装,并收到同样的错误。
发布于 2019-10-30 22:29:51
解决方案是再次使用recordID获取两个记录,然后设置create CKReference并使用重取对象设置它,然后保存重取对象。为什么要这么复杂我不知道。
https://stackoverflow.com/questions/58634067
复制相似问题