2014-10-11 29 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條記錄,包括:1,我做之前,我跑上面的查詢。任何提示?

回答

2

我看着辦吧。當然有一個簡單的答案,但即使這樣,它也不是完全簡單的。

我不得不進入Cloudkit Dashboard(在線網站)並確保創建者字段等將查詢標誌設置爲yes。

然而,即使那樣,舊的沒有出現(也許他們會在以後如果Cloudkit做一些批量過夜索引,不知道)。但IT DID爲從那一刻創建的記錄。

+0

啊,我之前也有類似的問題。我希望蘋果會默認所有元數據字段都可搜索和排序。或者向CloudKit添加功能,以通過代碼實現。 – 2014-10-13 05:42:00

+0

我同意。舊的記錄從來沒有出現過。如果你已經有了一個大型的數據集並且需要打開這個標誌來進行額外的開發,這將會非常糟糕。 – Narwhal 2014-10-14 18:32:12

2

您可以用於搜索的recordId這樣創建CKQuery:

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

我知道你是對的,但它不起作用。我不明白。我的其他查詢工作正常。 println(userRecordID.description) var query = CKQuery(recordType:「myComplaint」,predicate:NSPredicate(format:「%K ==%@」,「creatorUserRecordID」,CKReference(recordID:userRecordID,action:CKReferenceAction.None)) ) – Narwhal 2014-10-12 21:11:09

相關問題