Как вы используете MPMediaItemPropertyPersistentID для воспроизведения музыки в iPhone Music Player Framework? - PullRequest
3 голосов
/ 31 декабря 2010

Мой код успешно каталогизирует названия песен и идентификаторы для всей моей музыкальной библиотеки.Однако на самом деле он не будет воспроизводить песню с использованием этой методологии, и на консоли отобразится следующее:

Воспроизведение сообщенияВремя ожидания истекло.

Время ожидания сообщения сейчас истекло.

self.musicPlayer = [MPMusicPlayerController applicationMusicPlayer];

MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [everything items];
SongName = [[NSMutableArray alloc] init];
SongItem = [[NSMutableArray alloc] init];
NSString *songTitle;
NSString *songID;
//Collect names & ID for entire music library & put into arrays
for (MPMediaItem *song in itemsFromGenericQuery) {
songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
[SongName addObject:songTitle];
songID = [song valueForProperty: MPMediaItemPropertyPersistentID];
[SongItem addObject:songID];
}

NSLog (@"%@", [SongName objectAtIndex:1]);
NSLog (@"%@", [SongItem objectAtIndex:1]);
// Play the second song in the list
MPMediaItemCollection *collection = [MPMediaItemCollection collectionWithItems:[NSArray arrayWithObject:[SongItem objectAtIndex:1]]];
[self.musicPlayer setQueueWithItemCollection:collection];
[self.musicPlayer play];

1 Ответ

6 голосов
/ 02 января 2011

Еще раз я отвечу на свой вопрос.Проблема заключалась в том, что collectionWithItems: ожидает массив MPMediaItems, а не массив MPMediaItemPropertyPersistentID.Вот рабочий код для тех, у кого может быть такая же проблема:

MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSArray *itemsFromGenericQuery = [everything items];
SongItem = [[NSMutableArray alloc] init];
for (MPMediaItem *song in itemsFromGenericQuery) {
   NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
   //NSLog (@”%@”, songTitle);
   songID = [song valueForProperty: MPMediaItemPropertyPersistentID];
   //NSLog (@”%@”, songID);
   [SongItem addObject:songID];
}

//Choose the first indexed song
NSString *selectedTitle = [SongItem objectAtIndex:0];

//Use the MPMediaItemPropertyPersistentID to play the song
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:selectedTitle forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery *mySongQuery = [[MPMediaQuery alloc] init];
[mySongQuery addFilterPredicate: predicate];
[musicPlayer setQueueWithQuery:mySongQuery];
[musicPlayer play];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...