Question

Maybe there's someone outthere who can help me fiure out my problem. I cant seem to display the playlistItems using cocoalibspotify. I have set up my playlistview and the first ableviewcontroller shows the playlist but when i try to call the items of the selected playlist I seem to get 0 numbersof row as my outputs show. the first view show how i pass the indexpath to the secondviewcontroller. the second script show my .h and .m files of the playlistitemsTavle view controller.

Overview.m - tableView with Playlists

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [playlistView deselectRowAtIndexPath:indexPath animated:NO];
    playlistItemViewController *trailsController = [[playlistItemViewController alloc] initWithStyle:UITableViewStylePlain];
    trailsController.currentPlaylist = [playlistArray objectAtIndex:indexPath.row];
    //[[self navigationController] pushViewController:trailsController animated:YES];
    [self getSongs];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showPlaylistItem"]) {
        UITableViewCell *BasicCell = (UITableViewCell *) sender;
        NSIndexPath *ip = [self.tableView indexPathForCell:BasicCell];
        SPPlaylist *selectedPlaylist = [playlistArray objectAtIndex:ip.row];

        playlistItemViewController *pivc = (playlistItemViewController *) segue.destinationViewController;
        pivc.currentPlaylist = selectedPlaylist;
    }
}

playlistitemsViewController.h -

   #import <UIKit/UIKit.h>
    #import "CocoaLibSpotify.h"
    #import "Simple_PlayerAppDelegate.h"
    #import "overViewController.h"


    @interface playlistItemViewController : UITableViewController

    {
        UITableView *tableView;
    }

    @property (retain, nonatomic) IBOutlet UITableView *tableView;

    @property (strong, readwrite, nonatomic) SPPlaylist *currentPlaylist;




    @end

playlistViewController.m - this should call the playlist items

#import "playlistItemViewController.h"


@interface playlistItemViewController ()

@end


@implementation playlistItemViewController {

}

@synthesize currentPlaylist;
@synthesize tableView;



- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];

}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    NSLog(@"numberOfRowsInSection: %d",[[currentPlaylist items] count]);
    return [[currentPlaylist items] count];
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SubtitleCell";
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [[[currentPlaylist items] objectAtIndex:indexPath.row] valueForKey:@"name"];

    return cell;


    if (indexPath.row == 0) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SubtitleCell"];
        [[cell.backgroundView  superview] bringSubviewToFront:cell.backgroundView];
        cell.textLabel.text = @"";
    }
    else{
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"SubtitleCell"];
        }
        SPPlaylistItem * item = [[currentPlaylist items] objectAtIndex:[[currentPlaylist items]count] - indexPath.row];
        cell.textLabel.text = [item.item name];

        if (item.itemClass == [SPTrack class]) {
            SPTrack * track = item.item;
            cell.detailTextLabel.text = [track consolidatedArtists];
        }

    }
    return cell;


}


@end
Was it helpful?

Solution

You need to wait for the playlist to load before the items are available.

Your playlist view controller needs to use SPAsyncLoading to load the playlist, something list this:

[SPAsyncLoading waitUntilLoaded:self.currentPlaylist timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedItems, NSArray *notloadedItems) {
    [self.tableView reloadData];
}];

Playlist loading can take a while, so make sure you put up some "loading" UI. You'll also need to load the visible tracks in a similar manner before their names will be available.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top