未保存设置CKReference

问题描述 投票:0回答:1

[在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)之前和之后都会得到CKReference的结果,它是一个与recordName相同的User的对象。但是在CloudKit仪表板中,Board不会更新其User字段,并且User没有将引用添加到其Boards参考列表,因此当我随后在User中查询关联的[C0 ] s我没有收到任何结果。我无法理解为什么根据记录的内容正确设置了引用,但实际上并未保存。

这里是用于保存到iCloud的代码:

Board

记录错误后发现错误“服务器记录已更改”,我认为这意味着记录的服务器版本比本地版本新。但是我不知道该怎么办,因为我刚刚清理/重建,删除了应用程序并重建/重新安装并收到了相同的错误。

ios cloudkit
1个回答
0
投票

解决方案是使用它们的+ (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); } }]; } 再次读取两条记录,然后设置创建recordID并使用re-fetched对象进行设置,然后保存重新提取的对象。为什么它要变得如此复杂,我不知道。

© www.soinside.com 2019 - 2024. All rights reserved.