cloudkit - 我不希望我的表格中的图片下载

时间:2016-01-14 03:34:06

标签: ios swift cloudkit

我有一个包含3个文本字段和一个图像(CKAsset)的表。图像很大。我想查询表,只接收2个文本字段而不下载图像。有没有办法指定我只想要2个文本字段?

这是我使用的代码:

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查询并执行查询。我做错了什么,不确定它是什么。

1 个答案:

答案 0 :(得分:2)

您可以通过两种方式解决此问题:

  1. 您可以使用CKQueryOperation,您可以在其中指定所需的键。如果您确实需要资产,则必须使用资产的密钥查询/获取相同的记录。你可以用fetchRecordWithID做到这一点。这样做的缺点是它会再次获得整个记录。如果记录包含2个资产,则您无法指定只获得一个资产。
  2. 您可以将CKAssets放在单独的资产recordType中,并为其设置CKReference。然后,您可以有选择地仅获取该特定资产记录。
  3. 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))