2014-10-11 3 views
3

내 ckquery가 사용자가 만든 레코드를 가져 오지 않는 이유를 모르겠습니다. 여기 내 코드는 다음과 같습니다Cloudkit의 사용자 ID를 기반으로 쿼리 할 수 ​​없습니다.

@IBAction func browseMyComplaints(sender: AnyObject) { 
    // who am i? 
    CKContainer.defaultContainer().fetchUserRecordIDWithCompletionHandler({ userRecordID, error in 
     if error == nil { 
      println(userRecordID.description) 
      let query:CKQuery = CKQuery(recordType: "myComplaint", predicate: NSPredicate(format: "creatorUserRecordID = %@", userRecordID)) 

      var results : [CKRecord] = [CKRecord]() 
      var operation : CKQueryOperation = CKQueryOperation(query: query) 

      operation.recordFetchedBlock = { (record:CKRecord!) -> Void in 
       results.append(record) 
      } 

      operation.queryCompletionBlock = { 
       (cursor:CKQueryCursor!, error:NSError!) in 
       if (error != nil) { 
        NSLog(error.description) 
       } else { 
        NSLog("no query error reported") 
        NSLog(String(results.count) + " found") 
        tvComplaintRecords = results 
        self.performSegueWithIdentifier("complaintList", sender: self) 
       } 
      } 
      publicDatabase.addOperation(operation) 

     } else { 
      println("Can not identify user due to error: \(error.localizedDescription)") 
     } 

    }) 

} 

내 출력은 다음과 같습니다

<CKRecordID: 0x7be3f220; _46761404769b094e82053fea39b16bb5:(_defaultZone:__defaultOwner__)> 
2014-10-11 12:45:32.597 ReportAMenace[15244:781048] no query error reported 
2014-10-11 12:45:32.597 ReportAMenace[15244:781048] 0 found 

그러나 11 개 레코드가가, 내가 위의 쿼리를 실행하기 직전에 만든 그 일을 포함한다. 어떤 힌트?

답변

2

내가 그것을 알아낼. 물론 쉬운 대답이 있습니다. 그렇다고해도 완전히 똑바로는 아니지만.

나는 Cloudkit Dashboard (온라인 웹 사이트)에 들어가서 작성자 필드 등이 쿼리 플래그를 yes로 설정했는지 확인해야했습니다.

하지만 이전의 경우에도 표시되지 않았습니다 (Cloudkin이 일종의 일괄 인덱싱을 수행하는 경우 나중에 볼 수 있습니다.). 하지만 그 일은 그때부터 작성된 에 대한 작업입니다.

+0

아, 전에도 비슷한 문제가있었습니다. 사과가 기본적으로 모든 메타 데이터 필드를 검색 및 정렬 가능하게 만들었 으면합니다. 또는 CloudKit에 코드를 추가하여 기능을 추가 할 수 있습니다. –

+0

동의합니다. 오래된 기록은 결코 나타나지 않았다. 이미 대용량 데이터 세트를 보유하고 있고 추가 개발을 위해 플래그를 켜야하는 경우 이는 매우 나쁠 것입니다. – Narwhal

2

이 같은 recordID와를 검색하기위한 CKQuery을 만들 수 있습니다

var query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", "creatorUserRecordID" ,CKReference(recordID: userRecordID, action: CKReferenceAction.None))) 
+0

나는 당신이 옳다는 것을 알고 있지만 작동하지 않습니다. 나는 그것을 이해하지 못한다. 내 다른 쿼리는 정상적으로 작동합니다. QUEUE = CKQuery (recordType : "myComplaint", 술어 : NSPredicate (형식 : "% K == % @", "creatorUserRecordID", CKReference (recordID : userRecordID, 동작 : CKReferenceAction.None))) – Narwhal