2015-05-21 21 views
10

Khi giải mã JSON phản hồi từ webservice tôi nhận được một lỗi nói:Không thể đúc giá trị của loại '__NSArrayM' (0x34df0900) để 'NSDictionary' SWIFT

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

tôi đã cố gắng ra rất nhiều giải pháp được tìm thấy trong StackOverflow quá, nhưng không có gì hiệu quả.

Mã của tôi:

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

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

Phản hồi từ các Web Service:

[ 
    { 
     "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": {} 
    } 
] 

Cảm ơn bạn đã giúp đỡ của bạn

Trả lời

12

Hãy thử thay thế dòng sau:

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

Với sau:

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

Tôi hy vọng điều này sẽ giúp bạn!

Chúc mừng!

+0

Tôi không ở trước máy mac cho đến tối nay, tôi sẽ nói với bạn rằng tối nay! Cảm ơn tin nhắn của bạn ! – f1rstsurf

+0

bây giờ tôi có: "Toán tử nhị phân '! =' Không thể áp dụng cho toán hạng kiểu 'NSArray?' "và 'nil' cho" nếu jsonData ["message"] là? NSArray! = nil {" – f1rstsurf

+0

làm thế nào về việc sử dụng một cái gì đó như' NSArray.count> 0' như điều để kiểm tra nếu nó không rỗng hoặc trống? –

4

Sử dụng SwiftyJSON: https://github.com/SwiftyJSON/SwiftyJSON

let json = JSON(data: urlData!) 

Và nếu thành công là trong mảng

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

Hoặc nếu thành công không phải là trong mảng

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

Bạn cũng có thể kiểm tra giá trị thành công

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

Điều này sẽ xảy ra nếu bạn bỏ lỡ "cấp" đọc nhật ký. Tôi đã gặp phải lỗi này, cố gắng truyền tới NSArray thay vì NSMutableDictionary như ở đây Swift JSON error, Could not cast value of type '__NSArrayM' (0x507b58) to 'NSDictionary' (0x507d74)

Nội dung thực tế của đối tượng nằm trong một NSDictionary tại chỉ mục 0 của mảng đó. Hãy thử với mã này (bao gồm một số dòng đăng nhập để minh họa)

 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) 
Các vấn đề liên quan