Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firestore中存储的系统日期对象的行为将发生更改,您的应用程序可能会中断?_Swift_Firebase_Google Cloud Firestore - Fatal编程技术网

Swift Firestore中存储的系统日期对象的行为将发生更改,您的应用程序可能会中断?

Swift Firestore中存储的系统日期对象的行为将发生更改,您的应用程序可能会中断?,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,运行我的应用程序后,我在终端中获得以下输出。应用程序不会崩溃。我应该把这个代码放在哪里?它到底有什么作用 2018-08-16 09:45:05.414410-0400 Yubi[2652:1608362]4.13.0-[Firebase/Firestore][I-FST000001]系统日期对象的行为 Firestore中存储的内容将发生更改,您的应用程序可能会中断。隐藏 此警告并确保您的应用程序不会中断,您需要添加 在调用任何其他云Firestore之前,请将以下代码添加到您的应用程序 方法

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

2018-08-16 09:45:05.414410-0400 Yubi[2652:1608362]4.13.0-[Firebase/Firestore][I-FST000001]系统日期对象的行为 Firestore中存储的内容将发生更改,您的应用程序可能会中断。隐藏 此警告并确保您的应用程序不会中断,您需要添加 在调用任何其他云Firestore之前,请将以下代码添加到您的应用程序 方法:

let db=Firestore.Firestore()let settings=db.settings settings.AreTimestampsSinSnapshotSenabled=true db.settings=settings

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

//旧:let date:date=documentSnapshot.get(“created_at”)as!日期 //新建:let timestamp:timestamp=documentSnapshot.get(“创建时间”) 作为!Timestamp let date:date=Timestamp.dateValue()

启用新的日期时,请审核日期的所有现有用法 行为。在将来的版本中,行为将更改为新的 因此,如果您不遵循这些步骤,您的应用程序可能会崩溃


您应该在appDelegate中添加此项,您将在其中添加配置

FirebaseApp.configure()

let db = Firestore.firestore() 
let settings = db.settings 
settings.timestampsInSnapshotsEnabled = true 
db.settings = settings
通过将AreTimestampsInSnapshotEnabled设置为true,它将保存时间戳而不是日期

 // 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()
因此,当您读取它时,它将返回时间戳,因此,无论在代码中的什么地方,只要读取了日期,它现在就应该读取时间戳,并按照建议将其转换为日期对象

旧代码

 // 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()
应替换为新代码

 // 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()

希望它能帮助你理解这个警告。您必须对现有代码进行更改以满足新的指导原则,否则稍后会由于类型不匹配而导致崩溃。

我没有包含时间戳代码,因为我没有处理日期的常量。好的,没问题。你可以忽略它,这是对每个人的一般警告。可能在将来,如果您将使用它,那么您将意识到这一变化。:)