web-dev-qa-db-ja.com

タイプ '__NSArrayM'(0x34df0900)の値を 'NSDictionary'にキャストできませんでしたSWIFT

WebサービスからのJSON応答をデコードすると、次のエラーが表示されます。

Could not cast value of type '__NSArrayM' (0x34df0900) to 'NSDictionary'

StackOverflowにある非常に多くのソリューションも試してみましたが、何も機能しません。

マイコード:

let jsonData:NSDictionary = (NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as? NSDictionary)!

let success:NSInteger = jsonData.valueForKey("success") as! NSInteger

Webサービスからの応答:

[
    {
        "id": "1",
        "title": "bmw",
        "price": "500.00",
        "description": "330",
        "addedDate": "2015-05-18 00:00:00",
        "user_id": "1",
        "user_name": "CANOVAS",
        "user_zipCode": "32767",
        "category_id": "1",
        "category_label": "VEHICULES",
        "subcategory_id": "2",
        "subcategory_label": "Motos",
        "bdd": {}
    }
]

ご協力ありがとうございました

11
f1rstsurf

次の行を置き換えてみてください:

let jsonData:NSDictionary = (NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as? NSDictionary)!

以下の場合:

let jsonData:NSArray = (NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as? NSArray)!

これがお役に立てば幸いです。

乾杯!

12
Randika Vishman

SwiftyJSONを使用: https://github.com/SwiftyJSON/SwiftyJSON

let json = JSON(data: urlData!)

そして、成功がアレイにある場合

if let success = json[0]["success"].int {
     //Now you got your value
}

または、成功が配列にない場合

if let success = json["success"].int {
     //Now you got your value
}

成功値も確認できます

if let success = json["success"].int where success == 1 {
     // Now you can do stuff
}
5
allbto

これは、ログを読み取る「レベル」を逃した場合に発生します。このエラーが発生し、NSMutableDictionaryの代わりにNSArrayにキャストしようとしました Swift JSON error、could not cast value of type '__NSArrayM'(0x507b58)to 'NSDictionary'(0x507d74)

オブジェクトの実際の内容は、その配列のインデックス0のNSDictionary内にありました。このコードを試してください(説明のためにいくつかのログ行を含みます)

        let dataDict = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &error)

        println(dataDict)

        let contents = dataDict!.objectForKey("rows") as! NSMutableArray

        println(contents)

        println( "contents is = \(_stdlib_getDemangledTypeName(contents))")

        let innerContents = contents[0]

        println(innerContents)

        println( "inner contents is = \(_stdlib_getDemangledTypeName(innerContents))")

        let yourKey = innerContents.objectForKey("yourKey") as? String
        println(yourKey)
3
Francis Jervis