【问题标题】:Firebase iOS Swift: Cannot store object of type FIRTimestamp atFirebase iOS Swift:无法将 FIRTimestamp 类型的对象存储在
【发布时间】:2020-06-19 11:58:04
【问题描述】:

我有一个想要存储在 firebase 上的项目对象,但日期时间戳不允许这种情况发生。

这是我的项目结构:

    struct Item{
    var id: String = ""
    var itemName: String = ""
    var imageUrl: String = ""
    var price: String = ""
    var description = ""
    var categoryId = ""
    var postedBy = ""
    var postedByName = ""
    var coordinate = ""
    var date = Timestamp()


    func toDictionary() -> [String: Any]{
        return [ItemFields.ID: id,
                ItemFields.ITEM_NAME: itemName,
                ItemFields.IMAGE_URL: imageUrl,
                ItemFields.PRICE: price,
                ItemFields.DESCRIPTION: description,
                ItemFields.CATEGORY_ID: categoryId,
                ItemFields.POSTED_BY: postedBy,
                ItemFields.POSTED_BY_NAME: postedByName,
                ItemFields.COORDINATE: coordinate, 
                ItemFields.DATE: date
        ]
    }
}

保存项目时

 ref.setValue(item.toDictionary, withCompletionBlock: {(err, ref) in

我收到此错误:

无法在日期存储 FIRTimestamp 类型的对象。只能存储 NSNumber、NSString、NSDictionary 和 NSArra 类型的对象

【问题讨论】:

    标签: ios swift firebase timestamp


    【解决方案1】:

    Firebase 提供两个数据库,即实时数据库和 Firestore。您没有说要写入哪个数据库,但您调用 setValue() 的事实表明您正在使用实时数据库。

    实时数据库没有时间戳类型的数据。 Timestamp 是一个 Firestore 概念,错误消息告诉您不能将 Timestamp 类型的对象写入实时数据库。如果您想将某个时刻存储到实时数据库中,您应该存储一个标准的 unix 时间,以毫秒为单位,以 64 位整数表示。

    【讨论】:

    • 还是一个字符串,对吧?只需转换它,然后在需要时再转换回来?
    • 我永远不会将数字存储为字符串。如果这样做,则不能保证这些值正确排序。我也永远不会将时间戳类型值存储为格式化字符串。
    • 谢谢 Doug,我只是好奇这是一种不好的做法还是好的做法。 :) 所以你推荐使用 int?
    • 是的,这就是我的回答。
    • 谢谢,没错,我正在为此使用实时数据库。让我感到困惑的是,我使用 Firestore 并且运行良好。
    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多