Firebase查询 – 我得到一些types的NSArray作为结果(有时只)
所以我有这样一个firebase数据库:
userIndexes -- 1: uid1 -- 2: uid2 -- 3: uid3
我想通过使用密钥来获得uid。 所以我会这样查询它:
DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in print(snapshot.value) })
当我使用2
或3
作为起点,我得到这个打印(这里是2
):
可选({2 = uid2;})
我可以很容易地把它转换成Dictionary<String, AnyObject>
但是当我用1
作为起点的时候,我得到了这个:
可选(<__ NSArrayM 0x6000000494b0>(<null>,uid1))如果我试图将其转换为字典,它只是
nil
这是为什么?
我在论坛上提出了同样的问题
您应该避免在分布式系统中使用数组(特别是数字,顺序标识符)。
有关如何在Firebase中处理类似数组的行为的更多信息,以及为什么您应该避免使用数组:
它明确地定义在旧的Firebase文档中,当您在Firebase中使用arrays时发生了什么。 检查Firebase数据库中的数组
您也可以通过Firebase中的最佳实践:arrays
如果所有的键都是整数,并且在对象中的0和最大键之间的键的一半以上都有非空值,那么Firebase将把它作为一个数组来呈现。