Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Ios Firebase查询-我得到某种类型的NSArray作为结果(只是有时)_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios Firebase查询-我得到某种类型的NSArray作为结果(只是有时)

Ios Firebase查询-我得到某种类型的NSArray作为结果(只是有时),ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我有一个像这样的firebase数据库: userIndexes -- 1: uid1 -- 2: uid2 -- 3: uid3 DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in

我有一个像这样的firebase数据库:

userIndexes
-- 1: uid1
-- 2: uid2
-- 3: uid3
DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in
     print(snapshot.value)
})
我想通过使用密钥获取uid。因此,我将这样查询:

userIndexes
-- 1: uid1
-- 2: uid2
-- 3: uid3
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;})

我可以很容易地将其转换为
字典

但当我使用
1
作为起点时,我得到了以下结果:

可选((,0), uid1) 如果我试图将其转换为字典,它只会得到
nil

这是为什么?

我在..中问了同样的问题

在分布式系统中,应该避免使用数组(特别是数字、顺序ID)

有关Firebase中如何处理类似数组的行为以及为什么应该避免使用数组的更多信息:

它在旧的firebase文档中明确定义了在firebase中使用数组时会发生什么。检查

你也可以通过。。上面写着

如果所有键都是整数,并且对象中0和最大键之间的键有一半以上具有非空值,则Firebase将将其渲染为数组


啊,我想我明白了。问题是,在这种情况下,我不会将它们视为数组键。例如,它可能如下所示:
--1:uid1--45:uid45
每个用户都有自己的密钥,可以在其中添加或删除。所以我可以通过将密钥重命名为类似于
key45
,来解决这个问题,对吗?是的,对。。。始终使用一些字符串作为键,而不是Int,因为顺序方式键经常转换为数组,因为firebase相信它的自动递增。。。