2014-12-21 2 views
0

이 날이 오류를 보여CloudKit 데이터베이스 fetchRecordWithID 오류가

recordID와는 CKFetchRecordsOperation에 전달 예기치 않은 : CKReference : 0x7fb691c1c300; 8BBDA567-D00A-4603-91A2-D436677F3952 : (_ defaultZone : __ defaultOwner__)

나는 이유를 모른다. "owner"레코드를 참조하여 이전에 가져온 레코드에서 해당 레코드 ID를 가져 왔습니다. 그래서 내 reference 속성에서 해당 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를 만들려고 시도했다. :)하지만 나는 다른 곳에서 가져 오기를 할 때 여전히 문제가있다 .Handler와 그 중 하나가 더 가져온다. 그게 합법적인가? 그것은 (in) 메소드를 시작할 때 두 번째 페치 후에 항상 작동을 멈춘다. – Mayo323

+0

아마도 addOperation과 함께 다른 패치를 추가해야합니까? – Mayo323

+0

CloudKit 작업을 중첩 할 수 있어야하지만 이전에 이런 종류의 잠금을 본 적이 있습니다. 내 코드에서는 메인 큐에서 내부 연산을 시작하여이 문제를 해결했다고 생각합니다. –