2015-11-26 51 views
1

我很安全地展開,但由於某種原因,當它找不到與給定標題相同的歌曲時,應用程序仍然崩潰。這是爲什麼發生?我怎樣才能解決這個問題?爲什麼iTunes應用程序無法在itunes API中找到歌曲時會崩潰?

let searchTerm: String = playertitle.text! 

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

    if let escapedSearchTerm = itunesSearchTerm.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) { 
     let urlPath = "https://itunes.apple.com/search?term=\(escapedSearchTerm)&media=music" 
     let url: NSURL = NSURL(string: urlPath)! 



     print("Search iTunes API at URL \(url)") 



     let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) -> Void in 
      do { 
       if let dict: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary 
       { 


        let previewUrl = NSURL(string: (dict["results"]![0]["previewUrl"] as? String)!)! 
        print(previewUrl) 
        player = AVPlayer(URL: previewUrl) 




       } 

      } catch let jsonError as NSError { 

      } 
     } 
     task.resume() 

    } 



} 

回答

0

衛隊的響應數據類似如下,

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
     dispatch_async(dispatch_get_main_queue()) { 
      guard data != nil else { 
       print("response String is nil") 
       completionHandler(nil, error) 
       return 
      } 
      //completionHandler goes here 
     } 
    } 
    task.resume() 
+0

我發現錯誤發生的地方。它發生在'let previewUrl'行。由於該數組是空的,因此沒有任何數據可以獲取。 – tman0542

+0

是的,我發現太 – HackerManiac

0

你是安全的展開字典和它沒有結果。如果讓我們爲每一個可能的價值去一個。或者看看SwiftyJSON框架,它允許更小的如果讓。

0

不要強拆(!data!它可能是nil。使用if letguard

if let data = data as? NSData, 
    let dict: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary 

當你在它的時候,也檢查error參數。

分析數據時,nil可能會返回到處。所以這裏也要安全。擺脫所有的武力解開。

if let firstResult = dict["results"]?.first as? NSDictionary, 
let preview = firstResult["previewUrl"] as? String, 
let previewUrl = NSURL(string: preview) { 
    ... 
} 
相關問題