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

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

Решение Вопроса

unsigned long long ullvalue = strtoull([persistentID UTF8String], NULL, 0);
NSNumber * numberID = [[NSNumber alloc] initWithUnsignedLongLong:ullvalue];

MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:numberID forProperty:MPMediaItemPropertyPersistentID];
[numberID release];

// And so on.

Надеюсь, что это поможет любому, кто столкнулся с этой проблемой.

 jarryd10 мар. 2013 г., 18:58
Про решение. Спасибо!
 jkr07 нояб. 2011 г., 12:31
+1 за решение. Не преобразовывая в NSNumber, я попытался ввести NSString для предиката и вернуть 0 элементов. больше половины дня ушло на отладку. Ваше решение помогло. Благодарю.

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