Ios Firebase Swift无法转换类型为'__NSArrayM';(0x10591cc30)至';NSDictionary';
我正在使用带有Firebase的Swift作为后端。出于某种原因,我在一个快照中遇到此错误:Ios Firebase Swift无法转换类型为'__NSArrayM';(0x10591cc30)至';NSDictionary';,ios,swift,firebase,Ios,Swift,Firebase,我正在使用带有Firebase的Swift作为后端。出于某种原因,我在一个快照中遇到此错误: Could not cast value of type '__NSArrayM' (0x10591cc30) to 'NSDictionary' 当我使用此代码时,我会得到: let snapVal = snapshot.value as! [String: AnyObject] 为什么只有这个数据快照会发生这种情况,而它看起来与所有其他数据快照一样 数据如下所示: Snap (PERSON) {
Could not cast value of type '__NSArrayM' (0x10591cc30) to 'NSDictionary'
当我使用此代码时,我会得到:
let snapVal = snapshot.value as! [String: AnyObject]
为什么只有这个数据快照会发生这种情况,而它看起来与所有其他数据快照一样
数据如下所示:
Snap (PERSON) {
1 = {
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
};
}
snapVal如下所示(当我没有将其指定为[String:AnyObject]时):
(
"<null>",
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
}
)
(
"",
DESCRIPTION=“此处简要说明…”;
“DOB”=“1992年10月15日,晚上8:29”;
“状态”=1;
SONG=“一首歌”;
“开始日期”=“2016年5月10日,下午7:59”;
}
)
为什么会这样?- 确保您正在检索的数据类型为NSDictionary
let snapVal = snapshot.value as! [String: AnyObject]
致:
if let snapVal = snapshot.value as? [String: AnyObject]{
print(snapVal)
}
- 确保您正在检索的数据类型为NSDictionary
let snapVal = snapshot.value as! [String: AnyObject]
致:
if let snapVal = snapshot.value as? [String: AnyObject]{
print(snapVal)
}
我也有同样的问题,我通过将子值从0、1、2等更改为字符串值(如p0、p1)来解决问题。当您仅使用Int时,Firebase实际上不会为该子级保存标题值。如果这有意义的话 因此,将1更改为类似“value1”或“v1”的值,并使用swift使用
array.sort{$1.status>$0.status}
Snap (PERSON) {
1 = {
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
};
}
至:
Snap (PERSON) {
"value1" = {
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
};
}
我也有同样的问题,我通过将子值从0、1、2等更改为字符串值(如p0、p1)来解决问题。当您仅使用Int时,Firebase实际上不会为该子级保存标题值。如果这有意义的话 因此,将1更改为类似“value1”或“v1”的值,并使用swift使用
array.sort{$1.status>$0.status}
Snap (PERSON) {
1 = {
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
};
}
至:
Snap (PERSON) {
"value1" = {
DESCRIPTION = "Brief description here..";
"DOB" = "10/15/92, 8:29 PM";
"STATUS" = 1;
SONG = "A song";
"START_DATE" = "10/05/16, 7:59 PM";
};
}
因为
snapshot.value
是一个数组,而不是一个字典。@Ryan检查这个答案@Ryan用你的检索函数更新你的问题。因为snapshot.value
是一个数组,而不是一个字典。@Ryan检查这个答案@Ryan用你的检索函数更新你的问题。我试过了,它应该可以工作,但从未执行过因为snapshot.value不能是[String:AnyObject]类型,所以我尝试过,它应该可以工作,但从未执行过,因为snapshot.value不能是[String:AnyObject]类型