Search code examples
objective-cxcodecloudkit

CloudKit database fetchRecordWithID error


When i want to fetch record from private database it show me this error:

Unexpected recordID passed to CKFetchRecordsOperation: CKReference: 0x7fb691c1c300; 8BBDA567-D00A-4603-91A2-D436677F3952:(_defaultZone:__defaultOwner__)

I don't know why. I took that recordID from my previously fetched record with reference to that "owner" record. So i want fetch that recordID from my reference attribute.

Is something what i do wrong?

Here is my code for this:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creationDate > %@", upToDate];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Car" predicate:predicate];
CKContainer *container = [CKContainer defaultContainer];
CKDatabase *privateDB = [container privateCloudDatabase];
[privateDB performQuery:query inZoneWithID:nil completionHandler:^(NSArray*results, NSError*error){
    for (CKRecord*carRecord in results) {
        CarModel *car = [CarModel new];
        CKRecordID *ownerID = [record objectForKey:@"owner"];

        [privateDB fetchRecordWithID:ownerID completionHandler:^(CKRecord *record, NSError*error){
           // here i expect record with recordID same as recordID in my reference attribute
}

Curious is that 8BBDA567-D00A-4603-91A2-D436677F3952 from my error message is right ID when i search for it in Dashboard.

Is any other way to fetch "owner" record?


Solution

  • your ownerID should be of type CKReference. Then you have to query for the ownerID.recordID like this:

    CKReference *ownerID = [record objectForKey:@"owner"];
    [privateDB fetchRecordWithID:ownerID.recordID completionHandler:^(CKRecord *record, NSError*error){