2009-07-09 3 views
2

et merci d'avance pour votre temps. J'essaie de filtrer certains types de listes de lecture pour une application iPhone (génie et On-the-go, en particulier). la documentation indique que l'attribut de propriété MPMediaPlaylistPropertyPlaylistAttributes renvoie les attributs associés à une playlist sous la forme d'un NSNumber contenant un objet NSInteger. La documentation indique également ces valeurs possibles pour cette propriété:Utilisation de MPMediaPlaylistPropertyPlaylistAttributes et opérateurs bit à bit sur NSInteger- Objective C (iPhone)

e

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

Je veux connecter la valeur à la borne, donc je l'ai utilisé

NSLog (@ "valeur de l'attribut playlist:% @ ", [[playlist valueForProperty: MPMediaPlaylistPropertyPlaylistAttributes] stringValue]);

Cependant, il imprime une valeur de 0 à chaque fois. Cela signifie que chaque liste de lecture a l'attribut "MPMediaPlaylistAttributeNone", mais cela n'a pas de sens, car elle passe par beaucoup de génie et sur les playlists aller.

voici mon code entier:

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]); 
    } 

et voici le résultat, quand je lance l'application sur mon iphone.plusieurs de ces listes de lecture sont en fait des listes de génie:

attribut: 0 playlist: Acheté

attribut: 0 playlist: Acheté sur mon iPhone

attribut: 0 playlist: Army of Them

attribut: 0 playlist: attribut bleu

: 0 playlist: Closer

attribut: 0 playlist: Crazy

attribut: 0 playlist: Mad About You

attribut: 0 playlist: attribut de minuit

: 0 playlist: Something Elephants

attribut: 0 playlist: Supermassive Black Hole

attribut: 0 playlist: Take Me Away

attribut: 0 playlist: Le Mixed Tape

attribut: 0 playlist: attribut Temps

: 0 playlist: All Around Me attribut

: 0 playlist: anna cd

attribut: 0 playlist: Av

attribut: 0 playlist: av 2

attribut: 0 playlist: Crois

attribut: 0 playlist: BH

attribut: 0 playlist: Boulevard of Broken Dreams

attribut: 0 playlist: 1 voiture

attribut: 0 playlist: voiture 2

Attribut: 0 de la liste de lecture: voiture 3

Avez-vous des idées pour lesquelles chaque liste de lecture est associée à 0 pour les attributs?

Encore une fois, merci pour votre temps!

Répondre

0

Contrairement à un NSNumber, un NSInteger n'est pas un objet, si vous voulez utiliser %d au lieu de %@ pour l'imprimer ...

0

Un NSInteger est juste un typedef primitive:

typedef long NSInteger; 

Je pense qu'il est principalement utilisé pour éviter les problèmes entre les processeurs 32 bits/64 bits. Traitez-le comme un int normal, et utilisez% d en le passant dans un formateur de chaîne. Ou évitez tout le problème et utilisez [val intValue]; qui retourne un int normal.

+0

tout d'abord, merci pour la réponse. vous avez raison, et je suis retourné et a changé ce peu de code. il se lit maintenant: \t \t \t NSInteger theAttributes; \t \t \t \t \t \t theAttributes = [[playlist valueForProperty: MPMediaPlaylistPropertyPlaylistAttributes] IntegerValue]; \t \t \t NSLog (@ "attribut:% d de la liste de lecture:% @", theAttributes, [playlist valueForProperty: MPMediaPlaylistPropertyName]); Mais, le résultat est toujours le même, et chaque playlist a un attribut de "0". Ai-je besoin d'obtenir le NSInteger d'une manière différente, ou est-ce que MPMediaPlaylistPropertyPlaylistAttributes n'est pas vraiment supporté par le SDK iphone 3.0? merci! –

0
for (MPMediaPlaylist *playlist in playlists) { 

    NSInteger theAttributes =[playlist items].count; 

    NSLog(@"attribute:%d of playlist:%@", theAttributes, [playlist alueForProperty:MPMediaPlaylistPropertyName]); 
}; 
0

Essayez ceci. Ça fonctionne bien. @i va imprimer un nombre entier

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