Я столкнулся с чем-то очень похожим и разработал следующее:

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

Я попробовал все стандартные способы сделать это без преобладания.

Ответы на вопрос(1)

Ваш ответ на вопрос