显然我们无法做到,因为每当我尝试设置自己的用户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"]);
}
}
}
}];}
答案 0 :(得分:1)
不起作用。设置记录ID仅用于更新现有记录ID而不提取它。因此,您可以创建“人员”并将其CKRecordID(或其名称和区域)保存到NSUserDefaults或私有云数据库中。 或者您将UUID保存到person对象,这样您就可以按设备识别某个人......
您无需区分用户。如果您在私人空间工作,则仅供用户使用,您不会看到其他人的数据。在公共空间,所有用户都属于您应用的所有用户。 (参见CKContainer privateCloudDatabase和publicCloudDatabase)
如果您想在公共场合处理随身物品,请使用自己的属性。