Загрузить плейлист с помощью MPMediaQuery

в моем приложении я хочу сохранить пользовательский список воспроизведения в файле plist и загрузить этот список воспроизведения при запуске приложения.

это код, который я использую для сохранения:

if (self.backgroundMusicItems) {
    NSMutableArray *songsID = [[NSMutableArray alloc] initWithCapacity:0];
    MPMediaItem *item;
    for (item in self.backgroundMusicItems.items) {
        NSNumber *songId = [item valueForProperty:MPMediaItemPropertyPersistentID];
        [songsID addObject:songId];
    }
    NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [documentdir stringByAppendingPathComponent:@"playlist.plist"];
    [songsID writeToFile:filePath atomically:YES];
}

и это код, который я использую для загрузки:

NSString *documentdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentdir stringByAppendingPathComponent:@"playlist.plist"];

NSArray *myArray = [[NSArray alloc] initWithContentsOfFile:filePath];

NSMutableSet *predicates = [[NSMutableSet alloc] initWithCapacity:0];

if (myArray.count > 0) {
    NSNumber *songId;
    for (songId in myArray) {
        MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:songId forProperty:MPMediaItemPropertyPersistentID];
        [predicates addObject:predicate];
    }
    MPMediaQuery *query = [[MPMediaQuery alloc] initWithFilterPredicates:predicates];

    NSArray *mediaItems = [query items];
    if (mediaItems.count > 0) [GameOptions sharedClass].backgroundMusicItems = [[MPMediaItemCollection alloc] initWithItems:mediaItems];
}

myArray содержит 2 элемента, но метод [запрос элементов] возвращает 0 элементов. Где я не прав??


person Marg    schedule 11.05.2012    source источник


Ответы (1)


Вы запрашиваете песни, в которых для MPMediaItemPropertyPersistentID установлено значение для song1 И song2, что всегда будет возвращать нулевые результаты, поскольку логически невозможно, чтобы какие-либо песни соответствовали двум разным MPMediaItemPropertyPersistentID.

Вам нужно запустить запрос для каждого постоянного идентификатора.

person JosephH    schedule 12.10.2012