estoy bucle a través de todas las canciones de la biblioteca de música de un iPhone usando el siguiente código:NSNumber para MPMediaItemPropertyPersistentID a NSString y viceversa
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];
Cosas bastante básico.
Obtengo el PersistentID como NSString
porque necesito escribirlo en un archivo XML (para la transmisión a través de una red a otro dispositivo). De ahí la razón por la que no puedo simplemente dejarlo como NSNumber
.
El otro dispositivo solicitará que el iPhone reproduzca una pista transmitiendo el PersistentID de nuevo.
En este punto, el iPhone tiene un NSString
del PersistentID de la pista que debería reproducirse.
Sería combos repetir todas las canciones y comparar PersistentID hasta encontrar la pista que quiero, así que estoy tratando de usar el MPMediaPropertyPredicate
para que el iPhone me busque.
estoy usando el siguiente código para la búsqueda:
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];
Dónde persistentID
es el NSString
de antes.
Curiosamente, esto funciona para algunas canciones, no para otras. es decir, a veces la matriz items
no está vacía, aunque estoy pasando un NSString
, no un NSNumber
.
Me pregunto si hay una forma de convertir mi NSString
de vuelta al NSNumber
de donde vino, y cómo puedo hacer eso.
ACTUALIZACIÓN: He probado el NSNumberFormatter, también he intentado algo así como:
[NSNumber numberWithFloat:[persID floatValue]];
He intentado todas las formas estándar de hacerlo sin prevalecer.
+1 para la solución. Sin convertir a NSNumber intenté ingresar NSString al predicado y devolver 0 ítems. más de medio día ha intentado depurar. Tu solución ayudó. Gracias. – jkr
solución Pro. ¡Gracias! – jarryd