Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在CloudKit中获取私有用户记录_Ios_Cloudkit - Fatal编程技术网

Ios 在CloudKit中获取私有用户记录

Ios 在CloudKit中获取私有用户记录,ios,cloudkit,Ios,Cloudkit,我正在尝试在CloudKit中获取用户保存的数据。我可以在CloudKit仪表板中看到该记录,但无法通过应用程序中的代码访问该记录 -(void)getUserRecordID { CKContainer *defaultContainer =[CKContainer defaultContainer]; [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError

我正在尝试在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。我怎样才能得到它们

找到了解决办法。您必须使用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或其他内容。但我在文档中找不到任何说明如何进行的内容……你应该阅读指南。