【问题标题】:Getting different results reading from Firebase between iOS simulator and real device在 iOS 模拟器和真实设备之间从 Firebase 读取不同的结果
【发布时间】:2018-12-10 20:50:48
【问题描述】:

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

我有这个代码:

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 设备上,一切正常。

updateClasse1 是由let 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"

我不知道为什么会这样。

【问题讨论】:

  • 您确定在两台设备上使用的是同一个用户吗?
  • 由于您正在解析字符串,请确保您的日期可以使用您的语言环境进行解析(确保您选择了相同的语言和地区)。 F.e. “20/01/1990”不会解析“en-US”语言环境,而“01/20/1990”不会解析 f.e.使用“es-ES”语言环境。为确保您可以自己设置格式,f.e 为“dd/MM/yyyy”
  • @Daniel 非常感谢你的帮助,我完全忘记设置日期格式......我的错......但现在它工作得很好!!!
  • @Daniel 这是一个非常好的评论,应该作为答案发布。我会支持它,希望 OP 会接受它。

标签: ios swift firebase date


【解决方案1】:

由于您正在解析字符串,请确保您的 dateFormatter 可以使用使用的 loale 解析它。 F.e. "20/01/1990" 不会解析 "en_US" 语言环境,而 "01/20/1990" 不会解析 f.e.使用 "es_ES" 语言环境。

为确保,您可以自己设置格式:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2021-08-30
    • 2022-12-11
    • 2020-01-21
    • 2011-12-14
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多