运行我的应用程序后,我在终端中获得以下输出。该应用程序不会崩溃。我到底应该把这段代码放在哪里?究竟是做什么的?
2018-08-16 09:45:05.414410-0400 Yubi [2652:1608362] 4.13.0-[Firebase / Firestore] [I-FST000001]系统Date对象的行为 存储在Firestore中的存储将发生变化,您的应用可能会崩溃。隐藏 此警告并确保您的应用不会中断,您需要添加 在调用任何其他Cloud Firestore之前将以下代码添加到您的应用 方法:
让db = Firestore.firestore()让设置= db.settings settings.areTimestampsInSnapshotsEnabled = true db.settings =设置
进行此更改后,将读取存储在Cloud Firestore中的时间戳记 作为Firebase Timestamp对象而不是作为系统Date对象返回。 因此,您还需要更新期望使用Date的代码 期待一个时间戳。例如:
//旧:让日期:Date = documentSnapshot.get(“ created_at”)为!日期 //新功能:让时间戳记:时间戳记= documentSnapshot.get(“ created_at”) 如!时间戳记日期:Date = timestamp.dateValue()
启用新功能后,请审核Date的所有现有用法 行为。在将来的版本中,行为将更改为新的 行为,因此,如果您不执行这些步骤,则您的应用可能会崩溃。
答案 0 :(得分:4)
您应该在添加配置的appDelegate中添加它。
FirebaseApp.configure()
let db = Firestore.firestore()
let settings = db.settings
settings.timestampsInSnapshotsEnabled = true
db.settings = settings
通过将areTimestampsInSnapshotsEnabled设置为true,它将保存时间戳而不是日期
因此,当您读取它时,它将返回时间戳,因此无论在代码中何处读取了Date,它现在都应读取时间戳并将其转换为建议的Date对象。
旧代码
// old: This is old code returning Date object
let date: Date = documentSnapshot.get("created_at") as! Date
应替换为新代码
// new: This is new code returning Timestamp object
let timestamp: Timestamp = documentSnapshot.get("created_at") as! Timestamp
let date: Date = timestamp.dateValue()
希望它可以帮助您理解警告。您必须对现有代码进行更改以符合新准则,否则以后由于类型不匹配而导致崩溃。