Журнал CFNetwork для неизвестной ошибки / проблемы - PullRequest
0 голосов
/ 03 мая 2018

В моем приложении есть следующая функция:

// MARK: - Download JSON from ToH webserver
    func downloadJSON(completed: @escaping () -> ()) {
        let url = URL(string: "http://tourofhonor.com/BonusData.json")
        URLSession.shared.dataTask(with: url!) { (data, response, error) in
            if error == nil {
                do {
                    self.tohBonuses = try JSONDecoder().decode([jsonBonuses].self, from: data!)
                    DispatchQueue.main.async {
                        completed()
                    }
                } catch {
                    print("JSON Download Failed")
                }
            }
        }.resume()
    }

В консоли, когда вызывается эта функция, я получаю ошибку JSON Download Failed. Я не вижу никаких других ошибок вокруг этого все же. Некоторый поиск в Google указал мне на Диагностику CFNetwork. Я запустил приложение с этим набором как 1, так и 3, но ничего очевидного не выделяется. В обоих случаях я вижу

Ответ: HTTP / 1.1 200 OK

в моей консоли, и когда для ведения журнала установлено значение 3, я вижу, как текут необработанные данные, но это не содержимое моего JSON (я предполагаю, что оно загружается в виде двоичного файла).

Одна вещь, которую я заметил, когда мне было задано значение 1, это строка:

2018-05-02 22: 37: 43.079258-0700 PhotoPillion [88117: 42881245] CFNetwork Диагностика [1:69] 22: 37: 43,079 { Закончил: (ноль) Загрузчик: {url = http://tourofhonor.com/BonusData.json, cs = 0x0} от начала до начальной загрузки: 0,060393 с общее время: 0.747829с Всего байт: 547511

Похоже, это означает, что он загрузил 578 КБ данных, что соответствует размеру файла JSON на диске. Поэтому я не уверен, что именно идет не так.

Я не совсем уверен, каким будет следующий шаг.

РЕДАКТИРОВАТЬ, чтобы добавить некоторые дополнительные детали: До моей функции выше у меня есть var tohBonuses = [jsonBonuses]() в моем коде, а затем, что jsonBonuses () является ссылкой на файл jsonBonuses.swift, который выглядит следующим образом:

import Foundation

struct jsonBonuses:Decodable {
    let bonusCode: String
    let category: String
    let name: String
    let value: Int
    let city: String
    let state: String
    let flavor: String
    let imageBase64: String
}

1 Ответ

0 голосов
/ 03 мая 2018

Проблема в том, что вы неправильно анализируете данные. JSON будет проанализирован со следующими объектами:

struct Bonus: Decodable {
    let bonusCode: String
    let category: String
    let name: String
    let value: Int
    let city: String
    let state: String
    let flavor: String
    let imageBase64: String
}

struct JsonData: Decodable {
    let name: String
    let version: String
    let bonuses: [Bonus]
}

, а затем

let parsedData = try JSONDecoder().decode(JsonData.self, from: data!)
self.tohBonuses = parsedData.bonuses

Что вы пытаетесь сделать, это проанализировать JSON:

{ name: ..., version: ..., bonuses: ... }

типу [Bonus].

И это не может сработать.

Также, чтобы ответить на вопрос об ошибках печати, вы можете сделать это просто:

do {
  ...
} catch {
    print(error)
}

См. Обработка ошибок в Swift

...