2

我打电话到iCloud的数据库在我的应用程序两种不同的方式:CloudKit操作执行的开发版本,但有时在量产版挂

1. 调用CKDatabase方便的方法开发(模拟器)的作品完美,生产(设备)环境:

let privateDatabase = CKContainer.defaultContainer().privateCloudDatabase 

privateDatabase.fetchRecordWithID(recordID, completionHandler: { (record, error) -> Void in 
    // handle record and errors 
}) 

2. 添加CKOperations到主队列完美的作品在开发环境,以及工作了一段时间,当我在生产环境中测试 - 但随后随意,几个小时后,间歇性测试,对数据库的这种调用只是开始挂起 - 不会产生错误,也不会执行完成代码。 (该fetchRecordWithID通话仍然运转完好所有的时间。)

let op1 = CKModifyRecordsOperation(recordsToSave: records, recordIDsToDelete: nil) 
op1.modifyRecordsCompletionBlock = { (savedRecords, deletedRecordIDs, error) -> Void in 
    // handle records and errors 
    } 
op1.database = privateDatabase 

// let op2, op3... 

NSOperationQueue.mainQueue().addOperations([ 
    op1, 
    op2, 
    op3, 
    ], waitUntilFinished: false) 

在CloudKit仪表盘的使用面板,没有什么甚至远程接近极限。我还没有考虑哪些其他变量 - 或者我可以运行哪些其他测试来弄清楚发生了什么问题?

+0

尝试设置op1,op2和op3.qualityOfService = .UserInitiated –

回答

1

尝试设定OP1,OP2和op3.qualityOfService = .UserInitiated

该设置已经被设置为一个 '下' 的标准值在IOS 9.

的文档状态的qualityOfService:

授予系统资源至 操作的相对重要性。服务级别会影响对象访问系统资源(例如CPU时间,网络 资源,磁盘资源等)的优先级。具有更高质量 服务级别的操作被赋予比系统资源更高的优先级,因此他们可以更快地执行其任务。您使用服务级别 以确保响应明确的用户请求的操作的优先级为 ,而不是较不重要的工作。该属性反映了有效执行操作所需的最低服务级别 。该属性的 默认值为 NSOperationQualityOfServiceBackground,并且您应该尽可能保留该值 。更改服务级别时,请使用适用于执行相应 任务的最低级别 。例如,如果用户启动任务并正在等待 完成,请将值NSOperationQualityOfServiceUserInitiated 分配给此属性。如果资源可用,系统可以为操作提供更高的服务级别 。

+0

背景应该保存您的请求,直到设备的无线电启动为例。 – malhal

相关问题