2012-09-19 17 views
13

Anunció esto en Apple sin suerte, pero ahora que iOS 6 NDA está activo, esperando que más ojos lo vean aquí.MPMediaPickerController.showsCloudItems parece no hacer nada

Estoy intentando modificar una aplicación para que solo permita a un usuario seleccionar la música que se ha descargado localmente. Tengo el siguiente código bajo iOS 6 GM:

MPMediaPickerController* mpc = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio]; 

mpc.allowsPickingMultipleItems = YES; 
mpc.modalPresentationStyle = UIModalPresentationCurrentContext; 
mpc.showsCloudItems = NO; 

[self presentViewController:mpc animated:YES completion:nil]; 

De la documentación:

El comportamiento predeterminado de un selector de elemento multimedia es sí, lo que significa que el el selector muestra los elementos disponibles de iCloud. Un elemento multimedia se considera un elemento iCloud si está disponible a través de iTunes Match y no está ya en el dispositivo .

Para mí, esto significa que si iTunes Match está activada, sólo los elementos que se han descargado en el dispositivo se mostrará en el selector, sin embargo siempre veo toda la biblioteca de iTunes Match. Archivé un radar para esto, porque parece ser un error grave. Si alguien puede decirme lo contrario, me gustaría saber lo que me falta aquí.

+0

¿Cuál es el número de radar? Voy a duplicarlo. Todavía está roto en 6.0.1. –

+0

Todavía roto en 3/6/2013. Estaba peleando con este yo mismo. Me alegra ver que no estoy solo. – MarqueIV

+0

todavía roto en 6.1.2. pero cuando se trata de un artículo de iCloud/iTunes Match, la propiedad MPMediaItemPropertyAssetURL de MPMediaItem debe devolver nada. –

Respuesta

1

Tuve este mismo problema. Aunque no pude ocultar los elementos, esta es una buena solución que utilicé para evitar que las personas puedan seleccionarlos. Dentro didPickMediaItems, debe cargar temporalmente en una AVPlayerItem y luego simplemente comprobar la validez de ese tema, así:

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 
{ 
    MPMediaItem *selectedItem = [[mediaItemCollection items]objectAtIndex:0]; 
    NSURL *tempURL = [selectedItem valueForProperty:MPMediaItemPropertyAssetURL]; 
    AVPlayerItem *playerItem = [[AVPlayerItem alloc]initWithURL:tempURL]; 

    if(playerItem.loadedTimeRanges==NULL) 
    { 
    UIAlertView *alert=[[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Invalid Song Choice",NULL) message:NSLocalizedString(@"Please choose a song that is local to your phone.",NULL) delegate:self cancelButtonTitle:NSLocalizedString(@"Okay",NULL) otherButtonTitles:nil]autorelease]; 
    [alert show]; 
    [playerItem release]; 
    } 
    else 
    { 
     NSLog(@"Your good to go...do whatever you want with the local song"); 
    } 
} 
+0

woooooah ... ¿alguien puede decir "caro"? – abbood

4

Una mejor solución para probar si un artículo proviene de iCloud en el didPickMediaItems delegado:

 MPMediaItem *selectedItem = [selectedItems objectAtIndex:0]; 

    if (![[selectedItem valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue]) 

Realmente no necesita jugarlo, es más eficiente usar la propiedad incorporada en el MPMediaItem.

-1

Parece estar arreglado en iOS 7.

El siguiente código funciona; Los elementos de iCloud no se muestran:

MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic]; 
picker.delegate = self; 
picker.allowsPickingMultipleItems = NO; 
picker.showsCloudItems = NO; 
+0

Solo una nota: esto parece funcionar solo si su destino de despliegue es ≥ 7.0. –

+0

Todavía no funciona conmigo – thisiscrazy4

+0

Parece estar funcionando para mí con destino de despliegue 6. Gracias a CocoaAficionado – user3344173

8

Esto parece ser un problema de sistema operativo.

Usando picker.showsCloudItems = NO; muestra correctamente menos canciones, en lugar de toda la lista ... Las canciones de la lista hay canciones que se han descargado ya sea manualmente en la aplicación de música o canciones que fueron transmitidos y por lo tanto en caché.

El problema, al menos en mi caso, es tratar con los almacenados en caché.

Si selecciono una canción que se descargó manualmente, el valor de MPMediaItemPropertyIsCloudItem es NO, que es el correcto. También puedo acceder a la URL del activo a través de la propiedad MPMediaItemPropertyAssetURL.

Por otro lado, la selección de una canción que se almacena en caché vuelve YES en MPMediaItemPropertyIsCloudItem y nil en MPMediaItemPropertyAssetURL, por lo que la canción prácticamente inútil para mí.

Lo siento, no tengo una respuesta real, pero no tengo la suficiente reputación como para comentar.

Espero que mis 2 centavos me ayuden de alguna manera, pero realmente me parece que este problema solo puede ser resuelto por Apple en una futura actualización.