Мое приложение CloudKit с swift4 / xcode10 работает только в симуляторе - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь сохранить и получить массив из 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...