2016-04-01 15 views
-2

Swift 2 ile başlıyorum ve iTunes API kullanmaya çalışan bir işlevi sonlandırmaya çalışırken bu hatayı aldım . "Çağrı atabilir, ama bu deneyin 'ile işaretli değildir ve hata değil işlenir "" buna çözüm nedir bu hatSwift 2: Çağrı atabilir, ancak 'try' ile işaretlenmez ve hata işlenmez

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

üzerine":

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

i hatası alıyorum sorun ? teşekkürler

+1

Olası kopyalar [Swift 2: Çağrı atabilir ama 'try' ile işaretlenmemiş ve hata ele alınmamıştır] (http://stackoverflow.com/questions/30737262/swift-2-call-can-throw-but-it-is-not-marked- try-and-the-error-is-değil-ha) – NobodyNada

cevap

2

Bu, tüm NSData öğelerinin JSON nesnelerine dönüştürülememesi nedeniyle oluşur. Bu o JSON ayrıştırma parçasını değiştirin:

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

teşekkürler, şimdi hatam yok –

-1

Ayrıca böyle somehting kullanabilirsiniz .. , ObjectMapper, SwiftyJSON, Alafir kullanılarak

 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 
     } 
ait