Использование MPMediaPlaylistPropertyPlaylistAttributes и побитовых операторов на NSInteger - Objective C (iPhone) - PullRequest
2 голосов
/ 09 июля 2009

и заранее спасибо за ваше время.

Я пытаюсь отфильтровать определенные типы списков воспроизведения для приложения для iphone (в частности, гений и On-the-go). в документации говорится, что атрибут свойства MPMediaPlaylistPropertyPlaylistAttributes будет возвращать атрибуты, связанные со списком воспроизведения, в форме NSNumber, содержащего объект NSInteger. В документации также перечислены эти возможные значения для этого свойства:

е

num {
   MPMediaPlaylistAttributeNone    = 0,
   MPMediaPlaylistAttributeOnTheGo = (1 << 0),
   MPMediaPlaylistAttributeSmart   = (1 << 1),
   MPMediaPlaylistAttributeGenius  = (1 << 2)
};
typedef NSInteger MPMediaPlaylistAttribute;

Я хочу записать значение в терминал, поэтому я использовал

NSLog (@ "значение атрибута списка воспроизведения:% @", [[playlist valueForProperty: MPMediaPlaylistPropertyPlaylistAttributes] stringValue]);

Тем не менее, он выводит значение 0 каждый раз. Это означает, что любой из списков воспроизведения имеет атрибут «MPMediaPlaylistAttributeNone», но это не имеет смысла, поскольку он проходит через множество гениальных и готовых плейлистов.

вот мой весь код:

MPMediaQuery *myPlaylistsQuery = [MPMediaQuery playlistsQuery];
    NSLog(@"number of playlists total:%d", [[myPlaylistsQuery collections] count]);
    NSArray *playlists = [myPlaylistsQuery collections];

    for (MPMediaPlaylist *playlist in playlists) {

        NSInteger theAttributes;

        theAttributes = [[playlist valueForProperty:MPMediaPlaylistPropertyPlaylistAttributes] integerValue];
        NSLog(@"attribute:%d of playlist:%@", theAttributes, [playlist valueForProperty:MPMediaPlaylistPropertyName]);
    }

и вот результат, когда я запускаю приложение на своем iphone. многие из этих плейлистов фактически являются гениальными плейлистами:

атрибут: 0 в плейлисте: приобретено

атрибут: 0 плейлиста: приобретено на моем iPhone

атрибут: 0 в плейлисте: Армия их

атрибут: 0 в плейлисте: синий

атрибут: 0 в списке воспроизведения: Closer

атрибут: 0 в плейлисте: Crazy

атрибут: 0 в плейлисте: Mad About You

атрибут: 0 плейлиста: полночь

атрибут: 0 в плейлисте: Something Elephants

атрибут: 0 плейлиста: Сверхмассивная черная дыра

атрибут: 0 в плейлисте: Take Me Away

атрибут: 0 в списке воспроизведения: The Mixed Tape

атрибут: 0 в плейлисте: время

атрибут: 0 в плейлисте: All Around Me

атрибут: 0 плейлиста: диск Анны

атрибут: 0 в плейлисте: Av

атрибут: 0 в плейлисте: av 2

атрибут: 0 в плейлисте: Believe

атрибут: 0 в плейлисте: BH

атрибут: 0 в плейлисте: бульвар разбитых снов

атрибут: 0 в плейлисте: автомобиль 1

атрибут: 0 в плейлисте: автомобиль 2

атрибут: 0 в плейлисте: машина 3

Есть идеи, почему каждый плейлист выходит с 0 для атрибутов?

Опять же, спасибо за ваше время!

Ответы [ 4 ]

0 голосов
/ 10 января 2011

Попробуй это. Работает нормально. @i выведет целое число

NSInteger theAttributes; theAttributes = [[playlist valueForProperty:MPMediaPlaylistPropertyPlaylistAttributes] integerValue]; NSLog(@"attribute:%i of playlist:%@", theAttributes, [playlist valueForProperty:MPMediaPlaylistPropertyName]);
0 голосов
/ 09 июля 2009

NSInteger - просто примитив typedef:

typedef long NSInteger;

Я думаю, что он в основном используется, чтобы избежать проблем между 32-битными / 64-битными процессорами. Обращайтесь с ним как с обычным int и используйте% d при передаче его в формататор строк. Или просто избегайте всей проблемы и используйте [val intValue];, который возвращает обычный int.

0 голосов
/ 17 декабря 2009
for (MPMediaPlaylist *playlist in playlists) {

    NSInteger theAttributes =[playlist items].count;

    NSLog(@"attribute:%d of playlist:%@", theAttributes, [playlist alueForProperty:MPMediaPlaylistPropertyName]);
};
0 голосов
/ 09 июля 2009

В отличие от NSNumber, NSInteger не является объектом, поэтому вы хотите использовать %d вместо %@, чтобы распечатать его ...

...