2012-09-19 12 views
13

Pubblicato questo su Apple senza fortuna, ma ora che l'iOS 6 NDA è attivo, sperando che altri occhi lo vedano qui.MPMediaPickerController.showsCloudItems sembra non fare nulla

Sto tentando di modificare un'app per consentire solo a un utente di selezionare la musica che è stata scaricata localmente. Ho il seguente codice sotto 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]; 

Dalla documentazione:

Il comportamento predefinito per un selettore di elemento multimediale è sì, che significa che il il selettore mostra disponibile articoli iCloud. Un elemento multimediale è considerato un elemento iCloud se è disponibile tramite iTunes Match e non è già memorizzato sul dispositivo.

Prendo questo per indicare che se iTunes Match è abilitato, solo gli elementi che sono stati scaricati sul dispositivo verranno visualizzati nel selettore, tuttavia vedo sempre l'intera libreria iTunes Match. Ho archiviato un radar per questo, perché sembra un bug serio. Se qualcuno può dirmi altrimenti, mi piacerebbe sapere cosa mi manca qui.

+0

Qual è il numero del radar? Lo farò in due. È ancora rotto su 6.0.1. –

+0

Ancora rotto nel 3/6/2013. Lo stavo combattendo da solo. Sono contento di vedere che non sono solo. – MarqueIV

+0

ancora interrotto su 6.1.2. ma quando si tratta di un elemento iCloud/iTunes Match la proprietà MPMediaItemPropertyAssetURL di MPMediaItem dovrebbe restituire zero. –

risposta

1

Ho avuto lo stesso problema. Sebbene non sia stato in grado di nascondere gli elementi, ecco una buona soluzione che ho usato per impedire alle persone di essere in grado di selezionarli. All'interno didPickMediaItems, è necessario caricare temporaneamente in un AVPlayerItem e poi basta verificare la validità di tale elemento in questo modo:

- (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 .. qualcuno può dire "costoso"? – abbood

4

Una soluzione migliore per testare se un oggetto proviene dal iCloud nella didPickMediaItems delegato:

 MPMediaItem *selectedItem = [selectedItems objectAtIndex:0]; 

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

Non è necessario riprodurlo, è più efficiente utilizzare la proprietà incorporata in MPMediaItem.

-1

Sembra risolto in iOS 7.

Il seguente codice funziona; Gli elementi di iCloud non vengono visualizzati:

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

Solo una nota: sembra funzionare solo se il target di implementazione è ≥ 7.0. –

+0

Ancora non funziona con me – thisiscrazy4

+0

Sembra funzionare per me con l'obiettivo di distribuzione 6. Grazie a CocoaAficionado – user3344173

8

Questo sembra essere un problema del sistema operativo.

Utilizzando picker.showsCloudItems = NO; mostra correttamente meno canzoni, invece di tutta la lista ... I brani elencati ci sono canzoni che o sono stati scaricati manualmente l'applicazione Musica o canzoni che sono state in streaming e quindi memorizzati nella cache.

Il problema, almeno nel mio caso, si occupa di quelli memorizzati nella cache.

Se si seleziona un brano scaricato manualmente, il valore di MPMediaItemPropertyIsCloudItem è NO, che è corretto. Posso anche accedere all'URL del bene tramite la proprietà MPMediaItemPropertyAssetURL.

D'altra parte, la selezione di un brano che è stato memorizzato nella cache restituisce YES su MPMediaItemPropertyIsCloudItem e nil su MPMediaItemPropertyAssetURL, rendendo la canzone praticamente inutile per me.

Spiacente, non ho una risposta reale ma non ho abbastanza reputazione per commentare semplicemente.

Spero che i miei 2 centesimi aiutino in qualche modo, ma mi sembra davvero che questo problema possa essere risolto da Apple solo in un prossimo aggiornamento.

Problemi correlati