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 &gt; $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

Firebase Swift 无法将“__NSArrayM”(0x10591cc30)类型的值转换为“NSDictionary”

无法在getDocuments querysnapshot(Swift)中将变量分配给Firebase数据[重复]

firebase swift 3 转换:无法将类型“(_)->()”的值转换为预期的参数类型“((错误)-> Void)?

“无法转换类型的值” - Firebase Swift 中的错误