2016-04-01 1 views
-2

Ich beginne mit Swift 2, und ich habe diesen Fehler beim Versuch, eine Funktion zu finalisieren, die versucht, iTunes API zu verwenden .Swift 2: Call kann werfen, aber es ist nicht mit "try" markiert und der Fehler wird nicht behandelt

func searchItunesFor(searchTerm: String) { 
    let itunesSearchTerm = searchTerm.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil) 

    if let escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) { 
     let urlPath = "http://itunes.apple.com/search?term=\(escapedSearchTerm)&media=software" 
     let url = NSURL(string: urlPath) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in 
      print("Task completed") 
      if(error != nil) { 
       print(error!.localizedDescription) 
      } 
      var err: NSError? 
      if let jsonResult = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary { 
       if(err != nil) { 
        print("JSON Error \(err!.localizedDescription)") 
       } 
       if let results: NSArray = jsonResult["results"] as? NSArray { 
        dispatch_async(dispatch_get_main_queue(), { 
         self.tableData = results 
         self.appsTableView!.reloadData() 
        }) 
       } 
      } 
     }) 

     task.resume() 
    } 
} 

erhalte ich die Fehlermeldung: „“ Rufen Sie werfen kann, aber es ist nicht mit ‚versuchen‘ markiert und der Fehler nicht behandelt wird „“ auf dieser Linie

if let jsonResult = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary { 
      if(err != nil) { 

Was dies die Lösung ist Problem ? danke

+1

Mögliche Duplikat [Swift 2: Der Anruf kann werfen , aber es ist nicht mit 'try' markiert und der Fehler wird nicht behandelt] (http://stackoverflow.com/questions/30737262/swift-2-call-can-throw-but-it-is-not-marked- with-try-and-the-error-ist-nicht-ha) – NobodyNada

Antwort

2

Das ist, weil nicht alle NSData in JSON-Objekte konvertiert werden können. Ersetzen Sie, dass JSON Parsen Teil mit diesem:

do { 
    if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as? NSDictionary { 
     dispatch_async(dispatch_get_main_queue(), { 
      self.tableData = results 
      self.appsTableView!.reloadData() 
     }) 
    } 
} catch let jsonError as NSError { 
    print(jsonError.localizedDescription) 
} 
+0

vielen Dank, ich habe jetzt den Fehler nicht –

-1

Sie auch somehting wie diese verwenden können .. verwenden, ObjectMapper, SwiftyJSON, Alafir

 guard let jsonResponce = try? JSON(data: data) else { 
      print("\n\n\n\n error :\(AppAlertMsg.kErrorMsg) \n\n URL:\(urlString) \n\n paramaters:\(JSON(paramaters as Any))\n\n\n\n") 
      failure("error") 
      return 
     } 
Verwandte Themen