2016-01-14 39 views
0

我有一個表有3個文本字段和圖像(CKAsset)。圖像很大。我想查詢表格,只接收2個文本字段而不下載圖片。有沒有辦法指定我只想要2個文本字段?cloudkit - 我不希望與我的表的圖像下載

這是我使用的代碼:

let predicate = NSPredicate(format: "CloudID = %@", tempCloudID) 
    let query = CKQuery(recordType: "Images", predicate: predicate) 
    query.sortDescriptors = [NSSortDescriptor(key: "Field1", ascending: true)] 
    query.sortDescriptors = [NSSortDescriptor(key: "Field2", ascending: true)] 

仍然無法查詢的表,他們店雖然與參考正常,當我刪除所屬表中刪除。

func test() { 
    //This works for storing my images, and I can delete the parent and it successfully removes all images. That’s what I want. 
    let parentId = CKRecordID(recordName: uploadList[uploadRecord].CloudID) 
    let parent = CKReference(recordID: parentId, action: CKReferenceAction.DeleteSelf) 
    let outputPath = NSHomeDirectory().stringByAppendingString("/Library/Pictures/" + uploadList[uploadRecord].File) 
    let File: CKAsset? = CKAsset(fileURL: NSURL(fileURLWithPath: outputPath)) 
    let imageRecord = CKRecord(recordType: "Images") 
    imageRecord.setObject(uploadList[uploadRecord].R, forKey: "R") 
    imageRecord.setObject(uploadList[uploadRecord].A, forKey: "A") 
    imageRecord.setObject(parent, forKey: "Reference") 
    imageRecord.setValue(File, forKey: "Image") 
    publicDB.saveRecord(imageRecord, completionHandler: ({returnRecord, error in 
     if let err = error { 
      self.notifyUser("Save Image Error", message: 
       err.localizedDescription) 
      print("Image Upload Error") 
     } else { 
      dispatch_async(dispatch_get_main_queue()) { 
       print("Image Sent Successfully") 
       // Mark image to be deleted? 
      } 
     } 
    })) 

} 

我試過通過addoperation查詢並執行查詢。我做錯了什麼,不確定它是什麼。

回答

2

你可以通過兩種方式解決這個問題:

  1. 你可以使用一個CKQueryOperation在那裏你可以指定desiredKeys。如果您確實需要資產,則必須使用資產的密鑰來查詢/獲取相同的記錄。你可以用fetchRecordWithID來做到這一點。這樣做的缺點是它會再次獲得整個記錄。如果記錄包含2項資產,則不能指定僅獲取一項。
  2. 您可以將您的CKAssets放置在單獨的資產recordType中,併爲其設置CKReference。然後,您可以選擇性地只獲取特定的資產記錄。

P.S.查詢像下面問了一個參考都可以用類似的代碼來完成:

let parentId = CKRecordID(recordName: referenceRecordName) 
let parent = CKReference(recordID: parentId, action: CKReferenceAction.None) 
let query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", referenceField ,parent)) 
+0

我只有2個表,現在,我還沒有建立起來使用CKReference現在,我設置的第二個表「CloudID」成爲第一張表中的ID。我看了一下CKReference,但不理解文檔以使其工作,並找不到一個好例子。我不想在沒有使用正確的CKReference的情況下添加另一個表格,因爲我將不得不跟蹤另一個「ID」。我這樣做後的下一步是獲取圖像,現在我只需要他們從中選擇的圖像列表。我將嘗試CKQueryOperation。我應該真的添加一個zoneID和CKReferences。 – Grumpy

+0

我仍然無法找到在此表上設置CKReference的方法。 tempCloudID = 13886D9B-8389-4253-981D-51DCD573BA05並且應該是所有者。我將如何設置圖像表以引用該ID? – Grumpy

+0

我使用CKQueryOperation修復了以前的錯誤。現在,我在嘗試打開圖像的下一個屏幕上出現錯誤。我正在使用let predicate = NSPredicate(格式:「recordID =%@」,myRecordID)。 myRecordID = 3F1CF4EC-95F4-4659-AA47-B00048B3BBAE。錯誤是:Field'__recordID'具有引用的值類型,無法使用過濾器值類型字符串查詢。 – Grumpy

相關問題