PropertyList Декодер декодирования возвращает ноль - PullRequest
0 голосов
/ 05 февраля 2020

Я кодирую массив структур. При кодировании возвращаемые данные имеют несколько байтов, что говорит мне о том, что что-то было записано в файл. Но когда я декодирую, он возвращает ноль. Я не получаю никакой ошибки при декодировании. Я не понимаю, почему он возвращает ноль после декодирования.

var allEndpts = [EndPt]()

struct EndPt : Codable {
    var contactStruct  = ContactStruct()
    var purpose: String = String()
}

struct ContactStruct: Codable {
    var firstName:String? = nil
    var lastName:String? = nil
}

private func saveEndPoints() {

    do {
        delegate.documentDirectoryUrl = try FileManager.default.url(
            for: .documentDirectory, 
            in: .userDomainMask, 
            appropriateFor: nil, 
            create: false
        )

        let localFileUrl:URL =
            delegate.documentDirectoryUrl!
                .appendingPathComponent("EndPoints")

        UserDefaults.standard.set(localFileUrl, forKey: "localEndPtUrl")
        print("localEndPtUrl: \(localFileUrl)")
        do {
            let encoder = PropertyListEncoder()
            let data = try encoder.encode(self.allEndpts)
            try data.write(to: localFileUrl)
        } catch {
            print(error)
        }
    } catch {
        print("error")
    }

    retrieveFromFile()
}

func retrieveFromFile() {

    typealias TempArray = [EndPt]
    var temp: TempArray?

    let localFileUrl =  UserDefaults.standard.url( forKey: "localEndPtUrl")
    print("localEndPtUrl: \(localFileUrl)")

    do {
        let data = try Data(contentsOf: localFileUrl!)
        let temp = try PropertyListDecoder().decode(TempArray.self, from: data)
        print("EndPt Array Dump: ", temp)
    } catch {
        print("read error:", error)
    }
}

1 Ответ

1 голос
/ 05 февраля 2020

Проблема в том, что

var temp: TempArray?

всегда будет нулевым, если вы не измените его. И ты никогда не меняешь это. Когда вы говорите

let temp = try PropertyListDecoder().decode(TempArray.self, from: data)

, это другое temp.

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