Ошибка fetchRecordWithID базы данных CloudKit

Когда я хочу получить запись из частной базы данных, она показывает мне эту ошибку:

Неожиданный идентификатор записи передан в CKFetchRecordsOperation: CKReference: 0x7fb691c1c300; 8BBDA567-D00A-4603-91A2-D436677F3952:(_defaultZone:__defaultOwner__)

Я не знаю почему. Я взял этот идентификатор записи из моей ранее извлеченной записи со ссылкой на эту запись «владельца». Итак, я хочу получить этот идентификатор записи из моего ссылочного атрибута.

Что-то я делаю не так?

Вот мой код для этого:

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 из моего сообщения об ошибке является правильным идентификатором, когда я ищу его в панели инструментов.

Есть ли другой способ получить запись «владельца»?


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 напрямую из этой ссылки :) Но у меня все еще есть проблемы, когда у меня есть еще одна выборка в завершенииHandler и еще одна в этой выборке. Это законно? Он всегда перестает работать после второго извлечения, когда он запускается для (in) метода. - 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
Ok. Я не очень хорошо знаком с быстрым, но, возможно, что-то там поможет мне решить мою проблему :) еще раз спасибо! и счастливого Рождества - person Mayo323; 23.12.2014