设置 CKReference 未保存

Setting CKReference is not saved

在 CloudKit 仪表板中,记录类型 User 有一个名为 Boards 的字段,类型为 Reference (List),记录类型 Board 有一个名为 User 类型 Reference。这是一个代码示例,指示我如何尝试 link a BoardUser:

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 以获取关联的 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);
        }
    }];
}

记录错误显示"Server Record Changed"错误,我认为这意味着记录的服务器版本比本地版本新。但我不知道该怎么办,因为我刚刚 cleaned/rebuilt,删除了应用程序并 rebuilt/reinstalled 并收到了同样的错误。

解决方案是使用它们的 recordID 再次获取两条记录,然后设置创建 CKReference 并使用 re-fetched[=15= 设置它] 对象,然后保存重新获取的对象。为什么需要这么复杂我不知道。