创建CKRecordID时可以使用用户记录ID来分配记录名吗?

Can we use user record ID to assign record name when creating CKRecordID?

显然我们不能,因为每当我尝试将自己的用户 record ID 设置为创建 CKRecordID 以创建记录时,它都会不断抛出错误。 如果我们不能使用每个用户的唯一 recordID 作为记录名称,那么首先设置其名称有什么意义呢?还有,我们在取数据的时候怎么区分用户?

CKRecordID *artworkRecordID = [[CKRecordID alloc] initWithRecordName:RANDOM_UNIQUE_NUMBER];
        CKRecord *artworkRecord = [[CKRecord alloc] initWithRecordType:@"person" recordID:recordID];
        artworkRecord[@"language"] = @"English";

        CKContainer *myContainer = [CKContainer defaultContainer];
        CKDatabase *privateDatabase = [myContainer privateCloudDatabase];
        [privateDatabase saveRecord:artworkRecord completionHandler:^(CKRecord *artworkRecord, NSError *error){
            if (!error) {
                NSLog(@"Success!");
            }
            else {
                NSLog(@"Failure!");
            }
        }];

编辑

我已经解决了。 因此,当您 save/add 数据时,记录名称根本不重要,因为您只能使用自己的用户记录 ID 从 PRIVATE DATA 获取自己的数据,因此您可以将其设置为 @"whatever" 并且它一点都不重要。

有几件事我还是不明白。

当我们甚至不使用它来获取数据时,为什么我们必须为私有数据设置记录名称?

-(void)fetchRecord {
CKDatabase *privateDatabase = [[CKContainer defaultContainer] privateCloudDatabase];
CKReference *reference = [[CKReference alloc] initWithRecordID:self.cloudRecordID action:CKReferenceActionNone];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creatorUserRecordID = %@", reference];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"person" predicate:predicate];
[privateDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
    if (error) {
        NSLog(@"error: %@",error.localizedDescription);
    }
    else {
        if (![results firstObject]) {
        }
        else {
            for (CKRecord *record in results) {
                NSLog(@"%@",[record objectForKey:@"language"]);
            }
        }
    }
}];}

无效。设置记录 ID 仅用于更新现有记录而不获取它。因此,您可以创建一个 "person" 并将其 CKRecordID(或名称和区域)保存到您的 NSUserDefaults 或私有云数据库中。 或者你将UUID保存到person对象中,这样你就可以通过设备识别一个人...

您不必区分用户。如果您在私人 space 上工作,它仅供用户使用,您不会看到其他人的数据。在 public space 上,所有内容都属于您应用的所有用户。 (参见 CKContainer privateCloudDatabase 和 publicCloudDatabase)

如果您想处理 public 中的物品,请使用自己的属性。