Я просматриваю все песни из музыкальной библиотеки 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]];
Я пробовал все стандартные способы сделать это без преобладания.