Tôi đang cố tải xuống một loạt bản ghi từ cơ sở dữ liệu công khai iCloud của tôi bằng CloudKit và con trỏ. Mã hoạt động tốt cho 3 lần thực thi đầu tiên, bất kể cách resultsLimit được đặt, nhưng khối hoàn thành thứ 4 không bao giờ được thực thi. Nếu resultsLimit không được thiết lập, tôi nhận được 300 bản ghi, nếu nó được đặt thành 50 tôi nhận được 150, nếu nó được đặt thành 5 tôi nhận được 15 ...Truy vấn CKQueryOperationCompletionBlock chỉ chạy 3 lần
Không có lỗi nào được báo cáo và khối dường như được thêm vào nhưng không bao giờ được thực hiện. Platform là OS X. Dưới đây là mã trong câu hỏi:
let queryOp = CKQueryOperation(query: query)
queryOp.recordFetchedBlock = self.fetchedDetailRecord
queryOp.resultsLimit = 5
queryOp.queryCompletionBlock = { [weak self]
(cursor: CKQueryCursor!, error: NSError!) -> Void in
println("comp block called with \(cursor) \(error)")
if error != nil {
println("Error on fetch \(error.userInfo)")
} else {
if cursor != nil {
let nextOp = CKQueryOperation(cursor: cursor)
nextOp.recordFetchedBlock = self!.fetchedDetailRecord
nextOp.queryCompletionBlock = queryOp.queryCompletionBlock
nextOp.resultsLimit = 5
self!.publicDatabase?.addOperation(nextOp)
println("added next fetch")
} else {
self!.fileHandle!.closeFile()
self!.exportProgressIndicator.stopAnimation(self)
}
}
}
self.publicDatabase?.addOperation(queryOp)
Và đây là kết quả từ bàn điều khiển -
459013587628,012 0 459013587628,621 1 459013587628,863 2 459013587629,113 3 459013587629,339 4 comp khối gọi với nil đã thêm lần tìm nạp tiếp theo 459013587828.552 5 459013587828.954 6 459013587829.198 7 459013587829.421 8 4 khối 59013587829.611 9 comp gọi với nil thêm tiếp theo lấy 459013587997,084 10 459013587997,479 11 459013587997,74 12 459013587997,98 13 459013587998,207 14
Số lớn chỉ là thời gian giữa các cuộc gọi đến recordFetchedBlock với số thứ hai là số số lần khối đó đã được gọi.
Tôi đang bối rối ... bất kỳ ý tưởng nào về cách tiến hành? Oh, container và publicDatabase là các biến lớp và được khởi tạo trước khi chạy đoạn mã ở trên.
Cảm ơn Dave, xin lỗi đã dành quá lâu để trả lời nhưng bạn phản ứng đã chết. Khi tôi chuyển nó thành chức năng riêng của nó, truy vấn chạy hoàn hảo. – Oswaldt
Cảm ơn! Tuy nhiên, có vẻ như operation.cursor = cursor không làm cho hoạt động bắt đầu với con trỏ; thay vì sử dụng hoạt động = CKQueryOperation (con trỏ: con trỏ) làm việc cho tôi - suy nghĩ? – hyouuu
Ahh, bắt tốt. Các tài liệu thực sự nói "Khi bạn sử dụng con trỏ, nội dung của thuộc tính truy vấn bị bỏ qua" vì vậy tôi đã cập nhật mẫu mã cho phù hợp. –