2014-12-21 6 views
0

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

Неожиданное RecordId передается CKFetchRecordsOperation: CKReference: 0x7fb691c1c300; 8BBDA567-D00A-4603-91A2-D436677F3952: (_ defaultZone: __ defaultOwner__)

Я не знаю почему. Я взял этот 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, когда я искать его в панели управления.

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

ответ

1

Ваш владелец ID должен быть типа CKReference. Затем вы должны запросить идентификатор ownerID.recordID следующим образом:

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

Большое спасибо за помощь. Я всегда старался сделать CKRecord прямо из этой ссылки :) Но у меня все еще есть проблемы, когда у меня есть еще одна выборка в completeHandler и еще одна в этой выборке. Это законно? Он всегда перестает работать после второй выборки, когда начинается метод (in). – Mayo323

+0

Возможно, мне нужно добавить еще один выбор с помощью addOperation? – Mayo323

+0

Хотя вы должны иметь возможность вложенных операций CloudKit, я видел этот вид блокировки раньше. В моем коде, я думаю, я решил это, начав внутреннюю операцию в главной очереди. –