2015-06-19 2 views
1

У меня проблема .. У меня есть приложение, которое соединяется с базой данных с jSON, теперь проблема в том, что он не может найти элемент в ответе базы данных. Это код:Swift JSON Crash with Nil

func uploadtoDB(){ 
    var SelectVehicle = save.stringForKey("SelectVehicleChoosed") 

    if SelectVehicle == nil { 

     var alertView:UIAlertView = UIAlertView() 
     alertView.title = "Submit Failed!" 
     alertView.message = "Please Select the Vehicle" 
     alertView.delegate = self 
     alertView.addButtonWithTitle("OK") 
     alertView.show() 


    }else { 

     var post:NSString = "vechicleNumber=\(SelectVehicle)" 

     NSLog("PostData: %@",post); 

     var url:NSURL = NSURL(string: "http://saimobileapp.com/services/sai_service_history.php?")! 

     var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! 
     var postLength:NSString = String(postData.length) 
     var request:NSMutableURLRequest = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "POST" 
     request.HTTPBody = postData 
     request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
     request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 


     var reponseError: NSError? 
     var response: NSURLResponse? 

     var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError) 

     if (urlData != nil) { 
      let res = response as! NSHTTPURLResponse!; 

      NSLog("Response code: %ld", res.statusCode); 

      if (res.statusCode >= 200 && res.statusCode < 300) 
      { 
       var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

       NSLog("Response ==> %@", responseData); 
       println(responseData) 
       var error: NSError? 

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


       var serviceDate = ((jsonData as NSDictionary)["serviceHistory"] as! NSDictionary) ["serviceDate"] as! String 
       var serviceType = ((jsonData as NSDictionary)["serviceHistory"] as! NSDictionary) ["serviceType"] as! String 
       var kms = ((jsonData as NSDictionary)["serviceHistory"] as! NSDictionary) ["mileage"] as! String 
       var serviceLocation = ((jsonData as NSDictionary)["serviceHistory"] as! NSDictionary) ["serviceLocation"] as! String 


       var serviced:Void = save.setObject(serviceDate, forKey: "ServiceDateChoosed") 
       var servicet:Void = save.setObject(serviceType, forKey: "ServiceTypeChoosed") 
       var kmsc:Void = save.setObject(kms, forKey: "KmsChoosed") 
       var servicel:Void = save.setObject(serviceLocation, forKey: "ServiceLocationChoosed") 
           save.synchronize() 

       TableView.reloadData() 

      } 
     } 
    } 
} 

и это ответ

{"serviceHistory":[{"id":"2","vehicleNumber":"mh03aw0001","mobileNumber":"9503322593","customerName":"samsun","serviceDate":"2012-06-02","serviceType":"Paid Service","mileage":"65","serviceState":"Maharashtra","serviceLocation":"Lower Parel","PUC":""}]} 

аварии приложение в строке var serviceDate = ((jsonData as NSDictionary)["serviceHistory"] as! NSDictionary) ["serviceDate"] as! String с нуля, потому что я думаю, что он не может найти элемент.

Заранее благодарим за помощь.

+0

Глядя на ваш JSON, '(jsonData as NSDictionary) [" serviceHistory "]' - это массив, а не словарь (он начинается с '[', а не '{'). – Moritz

ответ

2
// serviceHistory is an Array 
var serviceHistoryArray = jsonData["serviceHistory"] as! NSArray 

// fetch the first item... 
var serviceHistoryItem = serviceHistoryArray[0] as! NSDictionary 
var serviceDate = serviceHistoryItem["serviceDate"] 
var serviceType = serviceHistoryItem["serviceType"] 
var kms = serviceHistoryItem["mileage"] 
var serviceLocation = serviceHistoryItem["serviceLocation"] 
+1

он работает! Большое спасибо – markutus

0

В качестве примечания: разбор JSON стал своим родом популярной площадки для быстрых разработчиков, так как это нюансы проблемы, которая может быть затруднены в строго типизированных языках. У группы людей есть письменные библиотеки для решения этой проблемы «быстро», и было много интересных обсуждений по этой теме. Некоторые примеры:

и некоторые обсуждения проблемы: