Ios 在CloudKit中获取私有用户记录
我正在尝试在CloudKit中获取用户保存的数据。我可以在CloudKit仪表板中看到该记录,但无法通过应用程序中的代码访问该记录Ios 在CloudKit中获取私有用户记录,ios,cloudkit,Ios,Cloudkit,我正在尝试在CloudKit中获取用户保存的数据。我可以在CloudKit仪表板中看到该记录,但无法通过应用程序中的代码访问该记录 -(void)getUserRecordID { CKContainer *defaultContainer =[CKContainer defaultContainer]; [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError
-(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。我怎样才能得到它们 找到了解决办法。您必须使用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);
}
}
}];
}
找到了解决办法。您必须使用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);
}
}
}];
}
与您希望的代码相比,明确您发布的代码做什么和不做什么。它确实会获取当前用户的用户记录。它不获取保存在该用户专用容器中的数据,也不获取专用记录的RecordID。您的代码不尝试读取其他记录,只读取用户记录。我希望能够获取专用记录的ID或其他内容。但我在文档中找不到任何说明如何操作的内容…你应该阅读指南。与你希望它做的事情相比,澄清你发布的代码做什么和不做什么。它确实获得了当前用户的用户记录。它不获取保存在该用户专用容器中的数据,也不获取专用记录的RecordID。您的代码不尝试读取其他记录,只读取用户记录。我希望能够获取专用记录的ID或其他内容。但我在文档中找不到任何说明如何进行的内容……你应该阅读指南。