gpt4 book ai didi

ios - CKQuery操作错误: This operation has been rate limited

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:31 24 4
gpt4 key购买 nike

当使用 CKQueryOperation 下载记录时,客户端从 CloudKit 收到 error 1298: This operation has been rate limited 错误,只有一次,在 Apple 审查期间。我该如何解决这个问题?

这里是代码,没什么特别的:

let query = CKQuery(recordType: "Movie", predicate: NSPredicate(format: "creationDate > %@", d!))
let qo = CKQueryOperation(query: query)
let fb: (CKRecord!) -> () = {record in

temporaryContext.performBlockAndWait({

let fr = NSFetchRequest(entityName: "Movie")
fr.predicate = NSPredicate(format: "recordName = %@", record.recordID.recordName)

let a = temporaryContext.executeFetchRequest(fr, error: nil) as! [Movie]
if a.count == 0 {

let m = NSEntityDescription.insertNewObjectForEntityForName("Movie", inManagedObjectContext: temporaryContext) as! Movie
m.title = record.valueForKey("title") as! String
m.image = (record.valueForKey("image") as! CKAsset).fileURL.description
m.imageSize = Int32(record.valueForKey("imageSize") as! Int)
m.recordName = record.recordID.recordName
}
})
}

let c: ()->() = {

temporaryContext.performBlockAndWait({
let success = temporaryContext.save(nil)
})

Utility.managedObjectContext().performBlockAndWait({

let success = Utility.managedObjectContext().save(nil)
})

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "moviesDownloaded")
NSUserDefaults.standardUserDefaults().synchronize()

dispatch_semaphore_signal(self.sema)
}

let cb: (CKQueryCursor!, NSError!) -> () = {cursor, error in

if error == nil {

if cursor != nil {

let qo2 = Utility.qo(cursor, recordFetchedBlock: fb, completion: c)
publicDatabase.addOperation(qo2)

} else {

c()
}

} else {
Utility.log("error 1298: \(error.localizedDescription)")

dispatch_sync(dispatch_get_main_queue(), {
self.status.backgroundColor = UIColor.orangeColor()
})

NSThread.sleepForTimeInterval(0.5)

dispatch_semaphore_signal(self.sema)
}
}

qo.recordFetchedBlock = fb
qo.queryCompletionBlock = cb
publicDatabase.addOperation(qo)

dispatch_semaphore_wait(self.sema, DISPATCH_TIME_FOREVER)

我尝试将整个代码放入一个循环中,如下所示:

for i in 1 ... 2 {
var rateLimited = false

...
if error == nil {

} else {

NSThread.sleepForTimeInterval(3)
rateLimited = true
}
...

if !rateLimited {

break
}
}

你认为它会起作用吗?

最佳答案

如果您得到 CKErrorRequestRateLimited,错误将在错误的 userInfo 字典中有一个 CKErrorRetryAfterKey 键。在重试操作之前,您应该至少等待这段时间。

休眠等待是个坏主意,因为它会导致您的应用程序意外挂起,尤其是当该代码在您的主线程上运行时。使用 dispatch_afterNSTimer 重新发送您的操作。

关于ios - CKQuery操作错误: This operation has been rate limited,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661561/

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