CloudKit returns 记录太多
CloudKit returns too many records
我目前正在将我的数据从 Parse 移植到 CloudKit。我能够将我的数据导入 CloudKit 结构,但现在我没有收到正确数量的记录。我收到了 289 条记录,而不是 52 个用户(显示在仪表板中)。我尝试使用简单的 CKQuery
和 CKQueryOperation
。
CKQuery
returns 100 个结果由于限制而当我使用 CKQueryOperation
时,我收到 289 个结果,其中有许多重复条目。
我使用以下代码(CKQuery 方式..)获取我的所有用户:
let query = CKQuery(recordType: "User", predicate: NSPredicate(value:true))
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
publicDB.performQuery(query, inZoneWithID: nil) { (records, error) in
print("USER public count: \(records?.count)")
}
对于 CKQueryOperation,我编写了一个辅助库,它自动将结果移植到 swift class 结构中。
let uw = ROCloudBaseWebservice<User>()
uw.load { (data) in
logger.debug("User count (CKQueryOperation): \(data.count)")
}
如果您想查看此加载的代码,可以在此处查看:
https://github.com/prine/ROCloudModel/blob/master/Source/ROCloudBaseWebservice.swift
我的其他 3 个 table 也一样,我也得到了错误的数据量。只有具有 4 个条目的 table 正在接收正确数量的数据。
其他人有这个问题吗?我在 table 中使用引用。这会导致问题吗?
我刚发现 CloudKit 中有一个错误,删除的记录以某种方式隐藏起来仍然可用。我重置了我的开发环境并再次导入了数据,我得到了正确数量的返回记录。
可以在这个 Whosebug 中找到更多信息 post:
func loadAllClients() {
let pred = NSPredicate(value: true)
let sort = NSSortDescriptor(key: "Nome", ascending: true)
let query = CKQuery(recordType: "Cliente", predicate: pred)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["Nome", "Endereco","Telefone","Email","Observacao","Quartos","Banheiros","Frequencia","ValorPadraoST","ValorPadraoDC","ValorPadraoMC","Marketing","MensagemData","QtdAtendimento","ultimoAtendimento","DeuReview"]
operation.resultsLimit = 400
var newWhistles = CLIENTES
operation.recordFetchedBlock = { record in
newWhistles.append(record)
}
operation.queryCompletionBlock = { [unowned self] (cursor, error) in
DispatchQueue.main.async {
if error == nil {
//ViewController.isDirty = false
self.clienteRecords = newWhistles
//self.tableView.reloadData()
print("clienteRecords \(self.clienteRecords.count)")
} else {
let ac = UIAlertController(title: "Fetch failed", message: "There was a problem fetching the list of CLIENTES; please try again: \(error!.localizedDescription)", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
self.present(ac, animated: true)
}
}
}
database.add(operation)
}
我目前正在将我的数据从 Parse 移植到 CloudKit。我能够将我的数据导入 CloudKit 结构,但现在我没有收到正确数量的记录。我收到了 289 条记录,而不是 52 个用户(显示在仪表板中)。我尝试使用简单的 CKQuery
和 CKQueryOperation
。
CKQuery
returns 100 个结果由于限制而当我使用 CKQueryOperation
时,我收到 289 个结果,其中有许多重复条目。
我使用以下代码(CKQuery 方式..)获取我的所有用户:
let query = CKQuery(recordType: "User", predicate: NSPredicate(value:true))
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
publicDB.performQuery(query, inZoneWithID: nil) { (records, error) in
print("USER public count: \(records?.count)")
}
对于 CKQueryOperation,我编写了一个辅助库,它自动将结果移植到 swift class 结构中。
let uw = ROCloudBaseWebservice<User>()
uw.load { (data) in
logger.debug("User count (CKQueryOperation): \(data.count)")
}
如果您想查看此加载的代码,可以在此处查看: https://github.com/prine/ROCloudModel/blob/master/Source/ROCloudBaseWebservice.swift
我的其他 3 个 table 也一样,我也得到了错误的数据量。只有具有 4 个条目的 table 正在接收正确数量的数据。
其他人有这个问题吗?我在 table 中使用引用。这会导致问题吗?
我刚发现 CloudKit 中有一个错误,删除的记录以某种方式隐藏起来仍然可用。我重置了我的开发环境并再次导入了数据,我得到了正确数量的返回记录。
可以在这个 Whosebug 中找到更多信息 post:
func loadAllClients() {
let pred = NSPredicate(value: true)
let sort = NSSortDescriptor(key: "Nome", ascending: true)
let query = CKQuery(recordType: "Cliente", predicate: pred)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["Nome", "Endereco","Telefone","Email","Observacao","Quartos","Banheiros","Frequencia","ValorPadraoST","ValorPadraoDC","ValorPadraoMC","Marketing","MensagemData","QtdAtendimento","ultimoAtendimento","DeuReview"]
operation.resultsLimit = 400
var newWhistles = CLIENTES
operation.recordFetchedBlock = { record in
newWhistles.append(record)
}
operation.queryCompletionBlock = { [unowned self] (cursor, error) in
DispatchQueue.main.async {
if error == nil {
//ViewController.isDirty = false
self.clienteRecords = newWhistles
//self.tableView.reloadData()
print("clienteRecords \(self.clienteRecords.count)")
} else {
let ac = UIAlertController(title: "Fetch failed", message: "There was a problem fetching the list of CLIENTES; please try again: \(error!.localizedDescription)", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
self.present(ac, animated: true)
}
}
}
database.add(operation)
}