Грешка в базата данни на CloudKit fetchRecordWithID

Когато искам да извлека запис от частна база данни, ми показва тази грешка:

Неочаквано ID на записа, предадено на CKFetchRecordsOperation: CKReference: 0x7fb691c1c300; 8BBDA567-D00A-4603-91A2-D436677F3952:(_defaultZone:__defaultOwner__)

Не знам защо. Взех този ID на записа от предишния си извлечен запис по отношение на този запис на „собственик“. Така че искам да извлека този recordID от моя референтен атрибут.

Грешно ли е нещо, което правя?

Ето моят код за това:

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
}

Любопитно е, че 8BBDA567-D00A-4603-91A2-D436677F3952 от моето съобщение за грешка е правилният ID, когато го търся в таблото за управление.

Има ли друг начин за извличане на запис на „собственик“?


person Mayo323    schedule 21.12.2014    source източник


Отговори (1)


вашият ownerID трябва да е от тип CKReference. След това трябва да поискате ownerID.recordID по този начин:

CKReference *ownerID = [record objectForKey:@"owner"];
[privateDB fetchRecordWithID:ownerID.recordID completionHandler:^(CKRecord *record, NSError*error){
person Edwin Vermeer    schedule 22.12.2014
comment
Много благодаря за помощта. Винаги съм се опитвал да направя CKRecord директно от тази препратка :) Но все още имам проблеми, когато имам друго извличане в completionHandler и още едно в това извличане. Това законно ли е? Винаги спира да работи след второ извличане, когато стартира за (в) метод. - person Mayo323; 22.12.2014
comment
Може би трябва да добавя друго извличане с addOperation? - person Mayo323; 22.12.2014
comment
Въпреки че трябва да можете да влагате CloudKit операции, виждал съм този вид заключване и преди. В моя код мисля, че съм решил това, като стартирам вътрешната операция на главната опашка. - person Edwin Vermeer; 22.12.2014
comment
Да, наистина имам предвид github.com/evermeer/EVCloudKitDao Поне обектът EVCloudData винаги ще се връща към основната опашка. Основното дао няма. Исках да го запазя по-близо до функционалността на CloudKit. - person Edwin Vermeer; 23.12.2014
comment
Добре. Не съм много запознат със swift, но може би нещо там ще ми помогне да реша проблема си :) благодаря още веднъж! И Весела Коледа - person Mayo323; 23.12.2014