#iphone #cocoa-touch #mpmediaquery
#iPhone #cocoa-touch #mpmediaquery
Вопрос:
Мое приложение автоматически загружает список воспроизведения музыки при запуске. Чтобы сделать это, я сохраняю идентификаторы песен MPMediaItemPropertyPersistentID
в базе данных и загружаю песни при следующем запуске приложения. Основной код следующий:
MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPredicate
predicateWithValue:[NSNumber numberWithUnsignedLongLong: songID]
forProperty:MPMediaItemPropertyPersistentID
comparisonType:MPMediaPredicateComparisonEqualTo];
[MPMediaSongQuery addFilterPredicate:iPodMusicSongPredicate];
NSArray *collections = MPMediaSongQuery.collections;
Код загружает песни одну за другой. Мой вопрос: есть ли какой-либо способ запросить две или более песен с помощью MPMediaItemPropertyPersistentID
одновременно при использовании функции addFilterPredicate:
? Спасибо.
Ответ №1:
Если вы используете более одного addFilterPredicate, они объединяются с логическим И. Таким образом, вы можете только уменьшить результаты первого запроса, но не расширять его. Как следствие, вам не разрешается использовать несколько addFilterPredicates для одного и того же свойства. На самом деле результат не определен и, скорее всего, окажется в пустой коллекции. То, что вы ищете, представляет собой комбинацию одного и того же свойства с логическим ИЛИ. Вы можете добиться этого, как показано в следующем псевдокоде:
MPMediaQuery *MPMediaSongQuery = [MPMediaQuery songsQuery];
NSMutableArray *collections = [[NSMutableArray alloc] initWithCapacity:1];
for (int i=0; i < songIDCount; i ) {
MPMediaPropertyPredicate *iPodMusicSongPredicateiPodMusicSongPredicate = [MPMediaPropertyPredicate
predicateWithValue:[NSNumber numberWithUnsignedLongLong: songID[i]]
forProperty:MPMediaItemPropertyPersistentID
comparisonType:MPMediaPredicateComparisonEqualTo];
[MPMediaSongQuery addFilterPredicate:iPodMusicSongPredicate];
[collections addObjectsFromArray:MPMediaSongQuery.collections];
[MPMediaSongQuery removeFilterPredicate:iPodMusicSongPredicate];
}
…
Комментарии:
1. Суть в том, чтобы сделать только один запрос к музыкальной библиотеке. Ваш код по-прежнему запрашивает i раз…