gpt4 book ai didi

Swift CloudKit QueryOperation 重复

转载 作者:行者123 更新时间:2023-11-30 13:40:05 26 4
gpt4 key购买 nike

当我执行查询操作时,尽管 cloudkit 仪表板中只有 501 条记录,但我得到了大约 1542 个结果(全部重复)。

这是我的代码:

    func queryForTable() -> Void {

self.arrayOfFoodItems.removeAllObjects()

let container = CKContainer.defaultContainer()
let resultPredicate = NSPredicate(format: "TRUEPREDICATE")
let query = CKQuery(recordType: "FoodItems", predicate: resultPredicate)

let queryOp = CKQueryOperation(query: query)
let operationQueue = NSOperationQueue()

executeQueryOperation(queryOp, onOperationQueue: operationQueue)

}

func executeQueryOperation(queryOperation: CKQueryOperation, onOperationQueue operationQueue: NSOperationQueue){

queryOperation.database = CKContainer.defaultContainer().publicCloudDatabase
queryOperation.recordFetchedBlock = self.addRecordToArray
queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) -> Void in

if cursor != nil {
if let queryCursor = cursor{
let queryCursorOperation = CKQueryOperation(cursor: queryCursor)
self.executeQueryOperation(queryCursorOperation, onOperationQueue: operationQueue)
}
}
else {
self.sortToSectionsAndReloadData()
}
}

operationQueue.addOperation(queryOperation)

}

如何解决这个问题?非常感谢!

更新:这是我正在使用的其他两个函数。正如评论中所述,我在 viewDidLoad 中调用 queryForTable()。

func sortToSectionsAndReloadData() {

for (var i = 0; i < self.arrayOfSections.count; i++) {

self.arrayOfArrays[i].removeAllObjects()

let prefix:String = self.arrayOfSections[i]
let array:NSMutableArray = self.arrayOfArrays[i] as! NSMutableArray

for object in self.arrayOfFoodItems {

let name = object["itemName"] as! String

if name.lowercaseString.hasPrefix(prefix.lowercaseString) {

array.addObject(object)
}

}
}

NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
self.tableView.reloadData()
}
}

func addRecordToArray (record: CKRecord!) {

self.arrayOfFoodItems.addObject(record)

let recordItemName = record["itemName"]

print("\(recordItemName)")

}

最佳答案

对于每个queryCompletionBlock,您将收到获取到光标的所有记录。因此,第一个查询您将得到大约 100 条记录的结果,然后是 200 条记录,然后是 300 条记录,然后是 400 条记录,然后是 500 条记录。在您的情况下,您每次都将这些记录添加到结果中。如果将这些加起来,最终会得到 1500 条记录。因此,您不应将结果添加到数据数组中,而应该用结果替换数据数组。

关于Swift CloudKit QueryOperation 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com