Запрос библиотеки песен iPhone с известным постоянным идентификатором, возвращающим ноль

Я пытаюсь воспроизвести песню, на которую ссылается сохраненный идентификатор persistenceIdentifier, но MPMediaQuery возвращает 0 результатов, если я применяю к ней фильтр, используя сохраненное значение.

Мой код для неработающей отфильтрованной версии:

NSNumber *persistentId = [NSNumber numberWithLongLong:15991677378153886747];
MPMediaPredicate *filter = [MPMediaPropertyPredicate predicateWithValue:persistentId forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery *songQuery = [[MPMediaQuery alloc] initWithFilterPredicates:[NSSet setWithObject:filter]];
NSArray *songs = [songQuery items]; // [songs count] is zero here

Несмотря на то, что songs содержит MPMediaItem, который должен проходить через этот фильтр, я вместо этого возвращаю нулевые элементы. Проверьте это (сделано плохо):

MPMediaQuery *songQuery = [[MPMediaQuery alloc] init];
NSArray *songs = [songQuery items];

 // gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747
NSLog(@"%@", [songs objectAtIndex:5]); 

 // gives 15991677378153886747
NSLog(@"%@", persistentId);

Что я делаю неправильно? Я прочитал документацию/примеры проектов, и похоже, что это делается именно так.


person buildsucceeded    schedule 05.05.2013    source источник


Ответы (2)


Это может быть проблема с инициализацией unsigned long long константы. Попробуйте добавить к номеру суффикс ULL:

15991677378153886747ULL

Затем оберните его литералом NSNumber:

NSNumber *persistentId = @15991677378153886747ULL;
// Identical to: [NSNumber numberWithUnsignedLongLong:15991677378153886747ULL]
person Bryan Luby    schedule 10.05.2013

Я не думаю, что это нулевые элементы, он говорит, что у него есть один конкретный медиа-элемент:

// gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747

Попробуйте добавить это, посмотрите, появятся ли какие-либо заголовки:

NSLog(@"%@", [songs valueForKeyPath:@"title"]);
person Fluffhead    schedule 13.09.2013
comment
Я думаю, вы смотрите на то, как работает часть моего кода... это плохой способ (1) получить список всех песен в музыкальной библиотеке и (2) прочитать известный индекс в тестовой среде для отладка :) - person buildsucceeded; 14.09.2013