Genel veritabanından 500 "Ziyaret" kayıtlarını aşağı çekmek istiyorum. CloudKit sadece bir seferde 100 kayıt veriyor, bu yüzden istediğim tüm kayıtları almak için aşağıdaki gibi CKQueryCursor'u kullanıyorum. gayet iyi çalışıyorCKError: Sorgu süzgeci değer sınırını aşıyor: kapsayıcı için 250:
fetchVisits()
, bana yetiyor ziyaretleri alır:
func fetchVisits(_ cursor: CKQueryCursor? = nil) {
print("fetchVisits \(cursor)")
var operation: CKQueryOperation!
if let cursor = cursor {
operation = CKQueryOperation(cursor: cursor)
} else {
let query = CKQuery(recordType: "Visit", predicate: NSPredicate(format: "Client IN %@ AND ANY Students IN %@", visitClients, visitStudents))
operation = CKQueryOperation(query: query)
}
operation.recordFetchedBlock = {
(record) in
totalVisits.append(record)
}
operation.queryCompletionBlock = {
(cursor, error) in
if let error = error {
//handle error
} else if let cursor = cursor {
self.fetchVisits(cursor)
} else {
//all done!
}
}
CKContainer.default().publicCloudDatabase.add(operation)
}
ben fonksiyonu gibi diyoruz. Konsol Log
fetchVisits nil
fetchVisits Optional(<CKQueryCursor: 0x174228140; id=4bb7887c326fc719, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x17422a320; id=f67fb25669486da9, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x174228380; id=7e87eb8b7cfe1a74, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x17422cc80; id=e77e47ef2b29c8a4, zone=(null)>)
Ama konu ben bir düğmeye basmak zaman yenilemek istiyorum ve şimdi bana bu hata veriyor şimdi:
"Servis Yok" (6/2022); "İstek, http durum kodu 503 ile başarısız oldu"; 30.0 saniye sonra yeniden deneyin.
Oldukça açıklayıcı olan bu, sanırım 500 kadar kayıt talep ederek sunucuyu ezici yapıyorum? Bu yüzden 30 saniye bekleyip işlevi tekrar çağırıyorum ve şimdi bu hatayı alıyorum.
"Limit Aşıldı" (27/2023); server message = "Sorgu süzgeci değerlerin sınırını aşıyor: kapsayıcı için 250: kapsayıcı için 250
Bu nedenle, bu işlevi yeniden çalıştıramıyorum. Uygulamayı yeniden başlatırsam tekrar çalışır, ancak yalnızca ilk kez çalışır. Bir CKQueryCursor döndüren herhangi bir tabloya özgü.Ayrıca 100 kayıttan daha az (yani imleç nil) olan ve ben birden çok kez herhangi bir sorun olmadan çekebiliyorum başka tabloları var.
Sadece bu yüklemeyle test edildi: NSPredicate (format: "İstemci IN% @", visitClients) ve şimdi herhangi bir sunucu hatası olmadan istediğim kadar getirmeyi çağırabilirim. Şimdi getirildikten sonra sonuçlara ikincil yüklem süzgecini yapıyorum. Bu utanç verici çünkü ben şimdi sunucuya isabet ediyorum ve iyi bir sebepten dolayı ihtiyacım olandan daha fazla kayıt WAY getiriyorum. –