IOS 9 CloudKit: запрос ничего не возвращает при подключении к сотовой сети
Я разрабатываю приложение с бета-версией xcode 7 5. Когда я запускаю свое приложение на своем iphone 6, и я пытаюсь подключить его к CloudKit, если мой iphone работает в режиме Wi-Fi, все это нормально, я показываю все свои данные; но если мой iphone работает в режиме LTE, я не вижу никаких данных. Кто-нибудь знает, как это сделать?
func getRecordsFromCloud() {
lavori = []
/
let _cloudContainer = CKContainer.defaultContainer()
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
/
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Lavori", predicate: predicate)
/
let queryOperation = CKQueryOperation(query: query)
queryOperation.desiredKeys = ["image","name"]
queryOperation.queuePriority = .VeryHigh
queryOperation.resultsLimit = 50
queryOperation.recordFetchedBlock = { (record:CKRecord) -> Void in
let lavoriRecord = record
self.lavori.append(lavoriRecord)
}
queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor?, error:NSError?) -> Void in
if (error != nil) {
print("Failed to get data from iCloud - \(error!.localizedDescription)")
}
else {
print("Successfully retrieve the data from iCloud")
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
})
}
}
/
publicDatabase.addOperation(queryOperation)
}
Спасибо, Алессио
Ответы
Ответ 1
Откройте приложение настроек, найдите приложение, включите "использовать мобильные данные"
Обновление: Как обсуждается ниже
Добавление следующей строки кода позволило решить проблему:
queryOperation.qualityOfService = .UserInteractive
Причина, по которой это работает, - это проблема времени/нагрузки. Мое первоначальное предположение состояло в том, что это вызвано этой строкой:
queryOperation.queuePriority = .VeryHigh
В документах указано .queuePriority
следующее:
Вы должны использовать значения приоритета только по мере необходимости, чтобы классифицировать относительный приоритет независящих операций.
В документации для .qualityOfService
указано следующее:
Значением по умолчанию этого свойства является NSOperationQualityOfServiceBackground, и вы должны оставить это значение на месте, когда это возможно.
Итак, попробуйте удалить как .queuePriority
, так и .qualityOfService
и посмотреть, работает ли он.
Обновление 2: По-видимому, это ошибка CloudKit. У большего числа людей такая же проблема. Сообщите об этом https://bugreport.apple.com