2016-07-29 4 views
1

これは少し具体的かもしれませんが、私は自分のコードを見つめており、この問題を解決できません。基本的には、特定のプレイリストを取得し、最終的に戻ってくる曲の数を決定する番号を渡すことを目指すネットワークコールを行っています。コードは基本的に次のようになります。SpotifyへのAPIコールの後でオプションをアンラッピングしてnilを見つけるのが予期せず

// A network call is made just above to return somePlaylist 
    let playlist = somePlaylist as! SPTPartialPlaylist  
    var songs: [SPTPartialTrack] = [] 

    // load in playlist to receive back songs 
    SPTPlaylistSnapshot.playlistWithURI(playlist.uri, session: someSession) { (error: NSError!, data: AnyObject!) in 

     // cast the data into a correct format 
     let playlistViewer = data as! SPTPlaylistSnapshot 
     let playlist = playlistViewer.firstTrackPage 

     // get the songs 
     for _ in 1...numberOfSongs { 
      let random = Int(arc4random_uniform(UInt32(playlist.items.count))) 
      songs.append(playlist.items[random] as! SPTPartialTrack) 
     } 
    } 

問題はランダムを初期化するコードの部分にあります。おそらく、この関数の呼び出しで20回に1回、私は、何のためにも、playlist.items.countの値をアンラップして、理由を把握できないように見えます。たぶんAPI呼び出しやそれ以外の何かについて私が理解していないことがあるかもしれませんが、私はそれを理解できないようです。

誰でもこの問題に対処する方法や、これをデバッグする方法を教えてください。

答えて

0

[OK]を、それを眠って、もう少しで作業した後、私は問題を解決したようです。私のコードに実装したエラー処理は次のとおりです。

if let actualPlaylist = playlist, actualItems = actualPlaylist.items { 
     if actualItems.count == 0 { 
      SongScraper.playlistHasSongs = false 
      print("Empty playlist, loading another playlist") 
      return 
      } 

     for _ in 1...numberOfSongs { 
      let random = Int(arc4random_uniform(UInt32(actualItems.count))) 
      songs.append(actualPlaylist.items[random] as! SPTPartialTrack) 
     } 

     completionHandler(songs: songs) 
    } 
    else { 
     print("Returned a nil playlist, loading another playlist") 
     SongScraper.playlistHasSongs = false 
     return 
    } 
関連する問題