系统的行为 日期 存储在 Firestore 中的对象将更改 你的应用可能会中断?



运行我的应用程序后,我在终端中得到以下输出。应用程序不会崩溃。我应该把这个代码放在哪里?它到底有什么作用?

2018-08-16 09:45:

05.414410-0400 Yubi[2652:1608362] 4.13.0 - [火力基地/火库][I-FST000001] 系统日期对象的行为 存储在 Firestore 将要更改 并且您的应用程序可能会中断。要隐藏 此警告并确保您的应用不会中断,您需要添加 在调用任何其他云 Firestore 之前,请遵循应用的代码 方法:

let db =Firestore.firestore(( let settings = db.settings settings.are时间戳在快照中启用 = true db.settings = settings

通过此更改,将读取存储在云备份中的时间戳 返回为 Firebase 时间戳对象,而不是系统日期对象。 因此,您还需要更新期望日期的代码 期望时间戳。例如:

//old: let date: date = documentSnapshot.get("created_at"( as!日期 new: let timestamp: Timestamp = documentSnapshot.get("created_at"( 如!时间戳让日期:日期 = 时间戳.日期值((

请在启用新的 Date 时审核 Date 的所有现有用法 行为。在将来的版本中,行为将更改为新的 行为,因此,如果不执行这些步骤,您的应用可能会中断。

您应该在要添加配置的 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()

希望它可以帮助您理解警告。必须对现有代码进行更改以满足新准则,否则以后由于类型不匹配而导致崩溃。

最新更新