Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”
Posted
技术标签:
【中文标题】Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”【英文标题】:Firebase Swift Could not cast value of type '__NSArrayM' (0x10591cc30) to 'NSDictionary' 【发布时间】:2016-10-20 01:24:31 【问题描述】:我使用 Swift 和 Firebase 作为我的后端。出于某种原因,我在我的一张快照中遇到了这个错误:
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";
)
为什么会这样?
【问题讨论】:
因为snapshot.value
是一个数组,而不是字典。
@Ryan 检查这个答案***.com/a/39122662/4601170
@Ryan 使用您的检索功能更新您的问题。
【参考方案1】:
确保您检索的数据属于 NSDictionary 类型
然后尝试更改:-
let snapVal = snapshot.value as! [String: AnyObject]
到:-
if let snapVal = snapshot.value as? [String: AnyObject]
print(snapVal)
【讨论】:
我试过了,它应该可以工作,但它永远不会执行,因为 snapshot.value 不能是 [String: AnyObject] 类型【参考方案2】:我遇到了同样的问题,我通过将子值从 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";
;
【讨论】:
以上是关于Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”的主要内容,如果未能解决你的问题,请参考以下文章
Swift & Firebase - 无法转换类型“__NSDictionaryM”的值
Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”
无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]
firebase swift 3 转换:无法将类型“(_)->()”的值转换为预期的参数类型“((错误)-> Void)?