设置 CKReference 未保存
Setting CKReference is not saved
在 CloudKit 仪表板中,记录类型 User
有一个名为 Boards
的字段,类型为 Reference (List)
,记录类型 Board
有一个名为 User
类型 Reference
。这是一个代码示例,指示我如何尝试 link a 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
以获取关联的 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= 设置它] 对象,然后保存重新获取的对象。为什么需要这么复杂我不知道。
在 CloudKit 仪表板中,记录类型 User
有一个名为 Boards
的字段,类型为 Reference (List)
,记录类型 Board
有一个名为 User
类型 Reference
。这是一个代码示例,指示我如何尝试 link a 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
以获取关联的 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= 设置它] 对象,然后保存重新获取的对象。为什么需要这么复杂我不知道。