2016-10-09 20 views
0

Spotify iOS SDKを使用して、選択したプレイリストからトラックを取得したいと考えています。 しかし、それは常に私の配列内の項目を返しません。 私はトラックを取得するために、次のコードを使用しています:Spotify iOS-SDK:プレイリストからトラックを取得する(null)トラック

[SPTPlaylistSnapshot playlistWithURI:selectedPlaylist.uri accessToken:auth.session.accessToken callback:^(NSError *error, id object) { 

    if (!error) { 
     SPTPlaylistSnapshot *playlistSnapchot = object; 

     NSArray *songItemsArray = playlistSnapchot.firstTrackPage.items; 
     NSLog(@"LOADED: %@", songItemsArray); 

     [songItemsArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 

      SPTPartialTrack *track = obj; 
      NSLog(@"%@", track.name); 


     }]; 

    } 
    else 
    { 
     NSLog(@"Error loading Playlist Tracks: %@", error.localizedDescription); 
    } 

}]; 

songsItemsArrayは、いずれかがこの問題の原因が何であるかを知ってい(ヌル)

されるたびに? 私はすべてのSpotify Scopesを使用しています。

答えて

1

これは、リンカフラグがないために、プロジェクトの他のリンカフラグに "-all_load"を追加したことが原因です。

私は私のアプリでこれを行うには、ここに私のコードです:

func getTracksFrom(page:SPTListPage, allItems:[SPTPlaylistTrack]) -> [SPTPlaylistTrack] { 
    guard let items = page.items as? [SPTPlaylistTrack] else {print("empty page");return allItems} 
    var allTracks = allItems 
    allTracks.append(contentsOf: items) 

    var nextPage = SPTListPage() 

    if page.hasNextPage { 
     page.requestNextPage(withAccessToken: (SPTAuth.defaultInstance().session.accessToken)!) { (error, data) in 
      guard let p = data as? SPTListPage else {return} 
      nextPage = p 
     } 

     return getTracksFrom(page:nextPage,allItems:allTracks) 
    } 
    return allTracks 
} 

func getAllTracksFrom(_ playlist:SPTPlaylistSnapshot) -> [SPTPlaylistTrack] { 
    var allTracks:[SPTPlaylistTrack] = [] 
    allTracks = getTracksFrom(page: playlist.firstTrackPage, allItems: allTracks) 
    return allTracks 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    guard let p = playlist else {return} 
    SPTPlaylistSnapshot.playlist(withURI: p.uri, accessToken: (SPTAuth.defaultInstance().session.accessToken)!, callback: { (error, dataOrNil) in 
     guard error == nil else {print(error!);return} 
     guard let playlistSnapshot = dataOrNil as? SPTPlaylistSnapshot else {print("couldn't cast as SPTPlaylistSnapshot");return} 
     self.tracks = self.getAllTracksFrom(playlistSnapshot) 
     self.tableView.reloadData() 
    }) 
} 
関連する問題