搜索并返回 cloudkit 记录的单个字段

Posted

技术标签:

【中文标题】搜索并返回 cloudkit 记录的单个字段【英文标题】:Search and return single field of cloudkit records 【发布时间】:2015-07-14 09:34:32 【问题描述】:

我有 cloudKit 格式的记录

KeyWords : String
Content : Asset

资产约为 100k。

我正在使用 SearchDisplayController 来查询公共数据库,但它会返回整个记录。我能找到的每个教程也都是这样做的。

有没有办法只返回关键字字段,例如以某种方式使用谓词?

【问题讨论】:

【参考方案1】:

假设您使用 CKQueryOperation 来获取您的记录,您可以设置它的desiredKeys 属性来过滤掉不需要的值。像这样的。

fetchOperation.desiredKeys = ["KeyWords"]

【讨论】:

我使用的是CKQuery,我使用的是publicDatabase?.performQuery。 CKFetchRecordsOperation 是否有并行方法。我发现文档很迟钝! @Derek 不,很遗憾没有。您必须重新编写代码才能使用 CloudKit 的具有此属性的 NSOperation 子类之一。 感谢您的帮助。我得到了一些工作并发布了代码作为答案。如果您不介意将目光投向它,我们将不胜感激。【参考方案2】:

好的 有一些工作。这可能很老套,但我把它贴出来供处于相同情况的其他人参考...

let predicate = NSPredicate(value: true) // returns all - replace with whatever condition you want
let query = CKQuery(recordType: "Library", predicate: predicate) // create a query using the predicate
var operation = CKQueryOperation(query: query) // create an operation using the query
operation.desiredKeys = ["KeyWords"] // Array of whatever 'columns' you want to return
// operation.resultsLimit = 15 // optional limit on records

// Define a closure for what to do for each returned record
operation.recordFetchedBlock =  [weak self] (record:CKRecord!) in

    // Do whatever you want with each returned record  
    println(record.objectForKey("KeyWords"))



// Define a closure for when the operation is complete
operation.queryCompletionBlock =  [weak self] (cursor:CKQueryCursor!, error:NSError!) in

        if cursor != nil 
            // returns the point where the operation left off if you want t retrieve the rest of the records
        

        dispatch_async(dispatch_get_main_queue(),  () -> Void in

            // Do what you want when process complete
            self!.tableView.reloadData()
            if error != nil 
                println("there was an error")
            
        )
    

self.publicDatabase!.addOperation(operation) // Perform the operation on given database

【讨论】:

以上是关于搜索并返回 cloudkit 记录的单个字段的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 谓词:使用 CKQuery 的谓词搜索多个参考字段

使用 recordName 获取单个记录,它应该从 icloud 返回特定字段

如何对 Cloudkit 记录执行文本搜索?

如何从 CloudKit 查询和获取数据?

swift Swift - CloudKit:保存单个记录

如何向 CloudKit 中的现有记录添加字段