- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当使用 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_after
或 NSTimer
重新发送您的操作。
关于ios - CKQuery操作错误: This operation has been rate limited,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661561/
我需要创建一个CKQuery,其中谓词包含记录的引用,而不是记录的字段。 像这样 let query = CKQuery(recordType: "OUP", predicate: NSPredica
我正在尝试通过比较两个日期字段来查询 CloudKit 私有(private)数据库。 let predicate = NSPredicate(format: "timeStamp == %@",
我已经弄清楚如何搜索我的 CKrecord 并仅使用下面的代码显示一个字段中的字符串。 我有几个问题..(我是新手) 我可以搜索并且不区分大小写吗? 如何搜索记录中的所有字段,然后显示匹配项中的所有字
我有我一直在开发的 iOS 和 macOS 应用程序。使用 iOS 应用程序,用户可以将数据发送到 iCloud Drive,同时使用 macOS 应用程序接收数据。以下代码行来自 macOS 应用程
所以我在查询特定记录类型和解析它们的数据方面处于良好状态。但我无法弄清楚的是如何在所有记录类型中搜索,例如,今天修改的所有内容,无论它是什么记录类型。 想法? 最佳答案 想到的术语是 TRUEPRED
我需要查询所有记录类型,不进行任何过滤。我尝试了两种方法: let query = CKQuery(recordType: "Pm", predicate: nil) let query = CKQu
我正在使用 CloudKit 在应用程序启动时下载文件。我有一个 CKQuery 可以找到所有尚未下载的文件。当只有一两个下载时它工作正常,但是当有大量下载时,它会失败并出现错误: \"Server
我对 CloudKit 非常陌生,只是尝试运行最基本的查询。我想从 RecordType“Users”和字段类型“Name”中提取数据,并让名称等于我的 nameText 标签! 请参阅下面的代码:
当我获取包含字符串(或其他)字段的记录时,不到 1 秒: let query = CKQuery(recordType: "Messages", predicate: NSPredicate(for
使用 CloudKit CKQuery,您可以根据距离进行过滤(请参阅示例)。但是如何根据距离排序呢?喜欢位置 ASC。位置上的排序描述符返回错误:query.sortDescriptors = [N
我正在尝试使用 CloudKit 从 iCloud 检索数据。因为我只想执行一次,所以我将代码放在 AppDelegate.swift 文件的 didFinishLaunchingWithOption
我需要快速从我的应用程序中进行查询。我使用的是cloudKit,所以无法使用SQL 语言。 我想编写类似于以下内容的指令: SELECT * FROM parola WHERE IDParola IN
我尝试为此使用 CKQueryOperation: CKQueryOperation *o = [[CKQueryOperation alloc] initWithQuery:query]; [o s
CKQuery 文档说:谓词中使用的键名称对应于当前评估记录中的字段。键名称可能包括记录的元数据属性的名称例如“creationDate”或您添加到记录中的任何数据字段。 我还可以在 CKQuery
根据 Apples 类引用 CKQuery,运算符 CONTAINS 是受支持的运算符之一。但是,这似乎不起作用。我有一个名为 myRecord 的 RecordType,以及一个字段名称为 name
使用 Apple CloudKit,我有一个记录用户和一个连接表记录来连接用户并保存关系状态。这意味着用户可以请求加为好友,对方必须先接受。 现在我想查询用户所属的那些关系记录。这意味着在 CKRef
在 iOS 10.0.1 和 Xcode 8.0 上,我有一个 CKQuery 成功返回各种条件下的数据(BEGINSWITH 和等于某些字符串等。 ).现在,我正在专门查找其中一个字段中具有空值的记
Cloudkit private default zone 的查询结果是否有限制?我不知道为什么我只收到带有以下查询的前 100 条记录: let p = NSPredicate(format: "(
我正在开发实现 cloudkit 的 iOS 应用程序,但我需要查询 ID 大于某个数字的所有记录。例如我有 ID 为 23 的记录: 这是我的代码: CKContainer *myContainer
我是一名优秀的程序员,十分优秀!