将nsdata转换为NSDictionary

时间:2016-01-08 20:07:23

标签: ios swift

我试图从网络服务中获取JSON数组并且我一直收到错误,我花了很多时间在这上面但我无法弄明白。

http://ashishkakkad.com/2014/10/update-json-array-parsing-in-swift-langauage-ios-8-xcode-6-gm/

我的代码

if let url=NSURL(string:"http://www.example.com/service/service.php?get=6"){
            print(url)
            if let allContactsData=NSData(contentsOfURL:url){

                if let string1 = NSString(data: allContactsData, encoding: NSUTF8StringEncoding){
                    print(string1)
                }
                do{
                    if let allContacts: AnyObject = try NSJSONSerialization.JSONObjectWithData(allContactsData, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary{
                if let json = allContacts as? Array<NSObject> {

                    print(json)
                    for index in 0...json.count-1 {

                        let contact : NSObject? = json[index]
                        print(contact)

                        let collection = contact! as! Dictionary<String, AnyObject>
                        print(collection)

                        print(collection["title"])

                        let name : AnyObject? = collection["title"]
                        let cont : AnyObject? = collection["link"]

                        self.names.append(name as! String)
                        self.contacts.append(cont as! String)
                    }
                }
                print(self.names)
                print(self.contacts)
                    }
                } catch {
                    print("Dim background error")
                }
            }

我在这一行得到的错误

  

如果让allContacts:AnyObject = try   NSJSONSerialization.JSONObjectWithData(allContactsData,   选项:NSJSONReadingOptions.MutableContainers)为!的NSDictionary

1 个答案:

答案 0 :(得分:0)

你应该转向[[String: AnyObject]]而不是NSDictionary。但是,我承认我不熟悉您尝试使用的方法,我会做更多这样的事情:

enum HTTPStatusCodes : Int {
    case Ok = 200
    case Created = 201
    case BadRequest = 404
}

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.example.com/service/service.php?get=6")!)
let session = NSURLSession.sharedSession()

request.HTTPMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Accept")


let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

    guard let testResponse = response as? NSHTTPURLResponse else {
        print("bad \(response)")
        return
    }

    guard let status = HTTPStatusCodes(rawValue: testResponse.statusCode) else {
        print("derpped gain")
        return
    }
    print(status)

    switch status {
    case .Created:
        print("ehem")
    case .BadRequest:
        print("bad request")
    case .Ok:
        print("ok")
        let headerFields = testResponse.allHeaderFields
        guard let returnedData = data else {
            print("no data was returned")
            break
        }
        do {
            // convert data to string
            let jsonObject = try NSJSONSerialization.JSONObjectWithData(returnedData, options: .MutableLeaves) as! [[String:AnyObject]]
            //print(jsonDict)

        } catch let error {
            print(error)
        }


        // update user interface
        dispatch_sync(dispatch_get_main_queue()) {
            print("update interface")
        }
    }

}
task.resume()