Я пытаюсь сохранить и получить массив из iCloud. Затем я хочу напечатать результат и отобразить результат в метке.
В симуляторе результат печатается мгновенно, но текст на этикетке отображается примерно через 15 секунд, не понимаю, почему я получил эту задержку!
В любом случае, мой код работает в симуляторе (или на устройстве, связанном напрямую с XCode), но когда я отправляю приложение в «testflight» и загружаю его оттуда, оно больше не отображает результат в моем ярлыке.
Мои тестеры пробовали это на другом устройстве, но безрезультатно: на ярлыке ничего не отображается после отправки приложения на тестовый полет
import UIKit
import CloudKit
class ViewController: UIViewController {
struct Structure: Codable {
var a, b, c, d : String
var e : Double
}
var var1 = [
Structure(a: "-1", b: "111", c: "aaa", d: "2017-01-21 05:55:55", e: 1),
Structure(a: "111.1", b: "-1", c: "AAAAAA", d: "2018-04-27 07:54:25", e: 11)]
var var2 = [
Structure(a: "", b: "", c: "", d: "", e: 0),
Structure(a: "", b: "", c: "", d: "", e: 0)]
@IBOutlet weak var Label: UILabel!
@IBAction func Save(_ sender: Any) {
// Delete old record
let query = CKQuery(recordType: "Structure", predicate: NSPredicate(value: true))
CKContainer.default().privateCloudDatabase.perform(query, inZoneWith: nil) { (records, error) in
if error == nil {
for record in records! {
CKContainer.default().privateCloudDatabase.delete(withRecordID: record.recordID, completionHandler: { (recordId, error) in })
}
print("Deleted record")
}
}
// Save var1
let myRecord = CKRecord(recordType: "Structure")
if let data = try? JSONEncoder().encode(var1) {
myRecord["Content1"] = data
}
CKContainer.default().privateCloudDatabase.save(myRecord) { (record, error) in
guard record != nil else { return }
print("saved var1")
}
}
@IBAction func Load(_ sender: Any) {
let query = CKQuery(recordType: "Structure", predicate: NSPredicate(value: true))
CKContainer.default().privateCloudDatabase.perform(query, inZoneWith: nil) { (records, error) in
records?.forEach({ (record) in
let content = record.value(forKey: "Content1")
//convert data to var2
if let lp = content as? Data{
if let valuefromicloud = try? JSONDecoder().decode(Array.self, from: lp) as [Structure]{
self.var2 = valuefromicloud
}
}
//The next line print result instantly
print("Data from iCloud: \(self.var2[0].b)")
//The next line show result after aprox 15 sec delay, why this delay???
self.Label.text = "Data from iCloud: \(self.var2[0].b)"
})
}}
}
Итак, у меня есть три вопроса:
1: почему результат распечатывается мгновенно, а для обновления метки требуется около 15 секунд для обновления в симуляторе?
2: Почему мое приложение больше не обновляет его ярлык после того, как мои тестеры загрузили его с испытательного полета?
3: Можете ли вы дать мне пример рабочего кода, который сохраняет / извлекает мой массив из iCloud?