播放从保存的持久列表中检索到的iPod播放列表 [英] Play iPod playlist retrieved from a saved persistentid list

查看:109
本文介绍了播放从保存的持久列表中检索到的iPod播放列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我保存了使用媒体选择器选择的歌曲的持久ID,现在我正在尝试创建队列以播放该列表,但此代码中出现了问题:

I saved the persistent ID of the songs selected with media picker, now I'm trying to crate the queue to play that list but something is wrong in this code:

myPlayer = [MPMusicPlayerController applicationMusicPlayer];

    NSMutableArray *canzonilist = [[[NSMutableArray alloc] initWithCapacity:1] retain];
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"listaCanzoni"];
    NSArray *decodedData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    [canzonilist addObjectsFromArray:decodedData];

    MPMediaQuery *songQuery = [MPMediaQuery songsQuery];
    for (int i = 0; i > [canzonilist count]; i++) {
        [songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[canzonilist objectAtIndex:i] forProperty:MPMediaItemPropertyPersistentID]];
    }
    NSArray *songs = [songQuery items];
    MPMediaItemCollection *currentQueue = [[MPMediaItemCollection alloc] initWithItems:songs];

    if (currentQueue != nil) {    
        [myPlayer setQueueWithItemCollection:currentQueue];
    } else {
        [myPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];
    }

    [myPlayer play];
    [canzonilist release];
    [currentQueue release];

谢谢

推荐答案

最后我找到了解决方案:

Finally I found the solution:

SAVE:

    - (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    [self savePlaylist:mediaItemCollection];

    [self dismissModalViewControllerAnimated: YES];

}

- (void)savePlaylist:(MPMediaItemCollection *) mediaItemCollection {

    NSArray* items = [mediaItemCollection items];

    NSMutableArray* listToSave = [[NSMutableArray alloc] initWithCapacity:0];

    for (MPMediaItem *song in items) {

        NSNumber *persistentId = [song valueForProperty:MPMediaItemPropertyPersistentID];

        [listToSave addObject:persistentId];

    }

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject: listToSave];

    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"songsList"];

    [[NSUserDefaults standardUserDefaults] synchronize];

    [listToSave release];



}

LOAD

- (void)setupMusic {

     myPlayer = [MPMusicPlayerController applicationMusicPlayer];

     if ([[NSUserDefaults standardUserDefaults] objectForKey:@"songsList"] != nil) {

         NSMutableArray *theList = [[NSMutableArray alloc] initWithCapacity:0];

         NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"songsList"];

         NSArray *decodedData = [NSKeyedUnarchiver unarchiveObjectWithData:data];

         [theList addObjectsFromArray:decodedData];

         NSMutableArray *allTheSongs = [[NSMutableArray alloc] initWithCapacity:0];

         for (int i = 0; i < [theList count]; i++) {

             MPMediaQuery *songQuery = [MPMediaQuery songsQuery];

             [songQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[theList objectAtIndex:i] forProperty:MPMediaItemPropertyPersistentID]];

             NSArray *songs = [songQuery items];

             [allTheSongs addObjectsFromArray: songs];

         }

         MPMediaItemCollection *currentQueue = [[MPMediaItemCollection alloc] initWithItems:allTheSongs];

         [myPlayer setQueueWithItemCollection:currentQueue];

         [theList release];

         [currentQueue release];

         [allTheSongs release];

    } else {

        [myPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];

        [myPlayer setShuffleMode: MPMusicShuffleModeSongs]; //optional

     }

}

这篇关于播放从保存的持久列表中检索到的iPod播放列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆