Я столкнулся с чем-то очень похожим и разработал следующее:
ебираю все песни из музыкальной библиотеки 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];
Довольно простые вещи.
Я получаю 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
откуда и как я могу это сделать.
ОБНОВИТЬЯ пробовал NSNumberFormatter, я также пробовал что-то вроде:
[NSNumber numberWithFloat:[persID floatValue]];
Я попробовал все стандартные способы сделать это без преобладания.