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

时间:2016-10-20 01:24:31

标签: ios swift firebase

我使用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";
    }
)

为什么会这样?

2 个答案:

答案 0 :(得分:0)

  • 确保您检索的数据类型为 NSDictionary

然后尝试更改: -

 let snapVal = snapshot.value as! [String: AnyObject]

要: -

 if let snapVal = snapshot.value as? [String: AnyObject]{

        print(snapVal)

      }

答案 1 :(得分:0)

我有同样的问题,我通过将子值从0,1,2等更改为字符串值(如p0,p1)来解决我的问题。当您仅使用Int时,Firebase实际上不会为该子项保存标题值。如果这是有道理的。

因此,将1更改为“value1”或“v1”,并使用swift重新组织数组event.stopPropagation()

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";
    };
}