Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios cloudkit-我不想下载表中的图像_Ios_Swift_Cloudkit - Fatal编程技术网

Ios cloudkit-我不想下载表中的图像

Ios cloudkit-我不想下载表中的图像,ios,swift,cloudkit,Ios,Swift,Cloudkit,我有一个表,有3个文本字段和一个图像(CKAsset)。图像很大。我想查询表,只接收2个文本字段,不下载图像也。有没有办法指定我只需要两个文本字段 这是我正在使用的代码: let predicate = NSPredicate(format: "CloudID = %@", tempCloudID) let query = CKQuery(recordType: "Images", predicate: predicate) query.sortDescriptors = [NS

我有一个表,有3个文本字段和一个图像(CKAsset)。图像很大。我想查询表,只接收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进行查询并执行查询。我做错了什么,不确定是什么。

你可以用两种方法解决这个问题:

  • 您可以使用CKQueryOperation来指定所需的密钥。然后,如果您确实需要该资产,则必须使用该资产的键查询/获取相同的记录。您可以使用fetchRecordWithID来实现这一点。这样做的缺点是它会再次获得整个记录。如果记录包含2个资产,则不能指定仅获取一个资产
  • 您可以将CKAssets放在一个单独的asset recordType中,并为其设置CKReference。然后,您可以有选择地仅获取该特定资产记录
  • 另外,可以使用以下代码查询如下所示的参考:

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

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

  • 您可以使用CKQueryOperation来指定所需的密钥。然后,如果您确实需要该资产,则必须使用该资产的键查询/获取相同的记录。您可以使用fetchRecordWithID来实现这一点。这样做的缺点是它会再次获得整个记录。如果记录包含2个资产,则不能指定仅获取一个资产
  • 您可以将CKAssets放在一个单独的asset recordType中,并为其设置CKReference。然后,您可以有选择地仅获取该特定资产记录
  • 另外,可以使用以下代码查询如下所示的参考:

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

    我现在只有2个表,我现在没有使用CKReference设置它们,我正在将第二个表中的“CloudID”设置为第一个表中的ID。我查看了CKReference,但不了解使其工作的文档,也找不到好的示例。我不想在不使用正确的CKReference的情况下添加另一个表,因为我必须跟踪另一个“ID”。下一步是获取图像,现在我只需要图像列表供他们选择。我将尝试CKQUERY操作。我真的应该添加一个zoneID和CKReferences。我仍然找不到在这个表上设置CKReference的方法。tempCloudID=13886D9B-8389-4253-981D-51DCD573BA05,应为所有者。如何设置Images表以引用该ID?我使用CKQueryOperation修复了以前的错误。现在,我在下一个屏幕上尝试打开图像时出现了一个错误。我使用的是let predicate=NSPredicate(格式:“recordID=%@”,myRecordID)。myRecordID=3F1CF4EC-95F4-4659-AA47-B00048B3BBAE。错误是:字段“\uuuRecordId”的值类型为引用,无法使用筛选器值类型字符串进行查询。您应该使用CKReference而不是字符串进行查询。请参阅更新的awnserI,我正在尝试使用引用将数据保存到另一个表中。我在let query=行中从上面的代码中得到错误。错误是:使用未解析的标识符referenceField。referenceRecordName设置为“owner table”,是一个字符串,记录类型已更改为my table。我不认为我必须对“owner”表做任何事情?我现在只有2个表,我现在没有使用CKReference设置它们,我正在将第二个表中的“CloudID”设置为第一个表中的ID。我查看了CKReference,但不了解使其工作的文档,也找不到好的示例。我不想在不使用正确的CKReference的情况下添加另一个表,因为我必须跟踪另一个“ID”。下一步是获取图像,现在我只需要图像列表供他们选择。我将尝试CKQUERY操作。我真的应该添加一个zoneID和CKReferences。我仍然找不到在这个表上设置CKReference的方法。tempCloudID=13886D9B-8389-4253-981D-51DCD573BA05,应为所有者。如何设置Images表以引用该ID?我使用CKQueryOperation修复了以前的错误。现在,我在下一个屏幕上尝试打开图像时出现了一个错误。我使用的是let predicate=NSPredicate(格式:“recordID=%@”,myRecordID)。myRecordID=3F1CF4EC-95F4-4659-AA47-B00048B3BBAE。错误是:字段“\uuuRecordId”的值类型为引用,无法使用筛选器值类型字符串进行查询。您应该使用CKReference而不是字符串进行查询。请参阅更新的awnserI,我正在尝试使用引用将数据保存到另一个表中。我在let query=行中从上面的代码中得到错误。错误是:使用未解析的标识符referenceField。referenceRecordName设置为“owner table”,是一个字符串,记录类型已更改为my table。我想我不必对“主人”的桌子做任何事?