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