在 CloudKit 中获取私有用户记录
Posted
技术标签:
【中文标题】在 CloudKit 中获取私有用户记录【英文标题】:Getting Private User Record in CloudKit 【发布时间】:2015-09-29 00:21:26 【问题描述】:我正在尝试在 CloudKit 中获取用户保存的数据。我可以在 CloudKit 仪表板中看到记录,但无法通过应用程序中的代码访问它。
-(void)getUserRecordID
CKContainer *defaultContainer =[CKContainer defaultContainer];
[defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error)
if (!error)
[defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error)
self.userRecordID = recordID;
NSLog(@"user record id: %@",recordID);
[self getUserRecord];
];
else
NSLog(@"error: %@",error.localizedDescription);
];
-(void)getUserRecord
CKContainer *defaultContainer =[CKContainer defaultContainer];
CKDatabase *publicDatabase = defaultContainer.publicCloudDatabase;
[publicDatabase fetchRecordWithID:self.userRecordID completionHandler:^(CKRecord *userRecord, NSError *error)
if (!error)
NSLog(@"current coins: %@",userRecord);
else
NSLog(@"error: %@",error.localizedDescription);
];
这会获取用户记录信息,但不会获取已保存私人记录的 ID。我怎样才能得到它们?
【问题讨论】:
与您希望它做的相比,澄清您发布的代码的作用和不作用。 它确实获取了当前用户的用户记录。它不会获取保存在该用户私有容器中的数据,也不会获取私有记录的 RecordID。 您的代码不会尝试读取其他记录,只读取用户记录。 我希望我能获得私人记录或其他东西的 ID。但我在文档中找不到任何说明如何去做的事情...... 您应该阅读CloudKit Quick Start 指南。 【参考方案1】:想出了解决办法。您必须使用 CKQuery 和 NSPredicate 查询私有记录。
-(void)getUserRecordID
CKContainer *defaultContainer =[CKContainer defaultContainer];
[defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error)
if (!error)
self.userRecordID = recordID;
NSLog(@"user record id: %@",recordID.recordName);
[self getStatsRecord];
else
NSLog(@"error: %@",error.localizedDescription);
];
-(void)getStatsRecord
CKDatabase *privateDatabase = [[CKContainer defaultContainer] privateCloudDatabase];
CKReference *reference = [[CKReference alloc] initWithRecordID:self.userRecordID action:CKReferenceActionNone];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creatorUserRecordID = %@", reference];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Stats" predicate:predicate];
[privateDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error)
if (error)
NSLog(@"error: %@",error.localizedDescription);
else
if (![results firstObject])
[self createBlankRecord];
else
CKRecord *record = [results firstObject];
NSLog(@"%@",record);
];
【讨论】:
以上是关于在 CloudKit 中获取私有用户记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在私有数据库 CloudKit 中获取 RecordType 的所有名称
CloudKit,NSPredicate在私有容器中返回计数或确定是否存在任何记录?
CloudKit 私有数据库返回前 100 个 CKRecords