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

时间:2016-06-03 08:20:33

标签: objective-c cloudkit ckrecord

显然我们无法做到,因为每当我尝试设置自己的用户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!");
            }
        }];

修改

我已经解决了。 因此,当您保存/添加数据时,记录名称根本不重要,因为您只能使用自己的用户记录ID从PRIVATE DATA获取自己的数据,因此您可以将其设置为@"无论什么& #34;它根本不重要。

我仍然不了解一些事情。

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

-(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"]);
            }
        }
    }
}];}

1 个答案:

答案 0 :(得分:1)

不起作用。设置记录ID仅用于更新现有记录ID而不提取它。因此,您可以创建“人员”并将其CKRecordID(或其名称和区域)保存到NSUserDefaults或私有云数据库中。 或者您将UUID保存到person对象,这样您就可以按设备识别某个人......

您无需区分用户。如果您在私人空间工作,则仅供用户使用,您不会看到其他人的数据。在公共空间,所有用户都属于您应用的所有用户。 (参见CKContainer privateCloudDatabase和publicCloudDatabase)

如果您想在公共场合处理随身物品,请使用自己的属性。