在iOS模拟器和真实设备之间从Firebase读取不同的结果

时间:2018-12-07 14:24:04

标签: ios swift firebase date

我遇到了一个真正的问题,我不明白为什么会这样。我太初学者也找不到问题。

我有以下代码:

func setPickerFromDataBase(){
    if let user = Auth.auth().currentUser{
        // user is connect
        let ref = Database.database().reference()
        let userID = Auth.auth().currentUser?.uid

        ref.child("Licences").child(userID!).child("Medical").observeSingleEvent(of: .value) {(snapshot) in
            let value = snapshot.value as? NSDictionary

            let classe1 = value?["Classe1"] as? String ?? "1/1/1870"
            let classe2 = value?["Classe2"] as? String ?? "1/1/1870"
            let lapl = value?["LAPL"] as? String ?? "1/1/1870"

            self.dateFormatter.dateStyle = DateFormatter.Style.short
            let updateClasse1 = self.dateFormatter.date(from: classe1) ?? self.dateFormatter.date(from: "01/01/1990")
            let updateClasse2 = self.dateFormatter.date(from: classe2) ?? self.dateFormatter.date(from: "01/01/1990")
            let updateLAPL = self.dateFormatter.date(from: lapl) ?? self.dateFormatter.date(from: "01/01/1990")

            self.calsse1DatePicker.date = updateClasse1!
            self.classe2DatePicker.date = updateClasse2!
            self.laplDatePicker.date = updateLAPL!

            self.setAlert()
        }
    } else {

        fatalError("⛔️ error ...")
    }
}

在带有IOS 12.1的模拟器iPhone X设备上,一切正常。

updateClasse1let classe1给出的firebase值。

updateClasse2updateLAPL相同

但是当我将应用程序发送到装有iOS 12.1的iPhone X设备时,返回:

classe1 : The value from the dataBase
classe2 : The value from the dataBase
laps : The value from the dataBase 

updateClasse1 :  "01/01/1990"
updateClasse2 :  "01/01/1990"
updateLAPL :  "01/01/1990"

我不知道为什么会这样发生。

1 个答案:

答案 0 :(得分:3)

由于要解析字符串,请确保dateFormatter可以将其与使用的loale一起解析。 F.e. "20/01/1990"不会解析"en_US"语言环境,而"01/20/1990"不会解析f。 "es_ES"语言环境。

为确保这一点,您可以自行设置格式:

self.dateFormatter.dateFormat = "dd/MM/yyyy"

或确保使用的语言环境是您期望的语言环境:

self.dateFormatter.locale = Locale(identifier: "en_US")