2016-01-08 79 views
-1

我想从Web服务中获取JSON数组,并且一直收到错误,并且我花了很多时间在这个上,但是我无法弄清楚它。将nsdata转换为NSDictionary的Swift错误

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

错误我得到的这条线

if let allContacts: AnyObject = try NSJSONSerialization.JSONObjectWithData(allContactsData, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary

+0

什么是错误? – chedabob

+0

@chedabob数据无法被读取,因为它的格式不正确 –

+0

对AnyObject的注释和强制解包到NSDictionary是一个悖论。 – vadian

回答

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() 
+0

同样的错误:数据无法被读取,因为它的格式不正确 –

+0

@KhalilRumman更新了替代选项 –

+0

我不断收到此错误Error Domain = NSCocoaErrorDomain Code = 3840 –