Я просматриваю все песни из музыкальной библиотеки iPhone, используя следующий код:
NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];
for (MPMediaItemCollection * item in songs){
NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
// Do something with it.
}
[songs release];
Довольно простые вещи.
I ' m получить PersistentID как NSString
, потому что мне нужно записать его в файл XML (для передачи по сети на другое устройство). По этой причине я не могу просто оставить его как NSNumber
.
Другое устройство затем попросит iPhone воспроизвести трек, снова передав PersistentID.
На этом этапе, у iPhone есть NSString
PersistentID трека, который он должен воспроизводить.
Было бы утомительно перебирать каждую песню снова и сравнивать PersistentID, пока не найду нужный трек, поэтому я пытаюсь использовать MPMediaPropertyPredicate
, чтобы iPhone выполнял поиск меня.
Я использую следующий код для поиска:
MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:persistentID forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery * songsQuery = [[MPMediaQuery alloc] init];
[songsQuery addFilterPredicate:predicate];
if ([[songsQuery items] count]){
MPMediaItem * item = [[songsQuery items] objectAtIndex:0];
// Play item.
}
[songsQuery release];
Где persistentID
- это NSString
из ранее.
Как ни странно, это работает для некоторых песен, но не для других. т.е. иногда массив items
не пуст, даже если я передаю NSString
, а не NSNumber
.
Мне интересно, есть ли способ конвертировать мою NSString
обратно в NSNumber
, откуда он пришел, и как я могу это сделать.
UPDATE : Я пробовал NSNumberFormatter, я ' Я также пробовал что-то вроде:
[NSNumber numberWithFloat:[persID floatValue]];
Я пробовал все стандартные способы сделать это, но без особого успеха.