2013-10-18 10 views
8

Ich möchte ein UITableView nur mit den Songs anzeigen, die sich gerade auf dem Gerät befinden.MPMediaQuery nur zum Zurückgeben lokaler Elemente

Wenn ich alle Artikel abfrage bekomme ich (offensichtlich) alle Artikel, einschließlich der einmal, die ich gekauft, aber nicht heruntergeladen habe. Hier ist die (Teil) des Codes

@property (strong, nonatomic) NSMutableArray *songsList; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    MPMediaQuery *everything = [[MPMediaQuery alloc] init]; 
    NSArray *itemsFromGenericQuery = [everything items]; 
    self.songsList = [NSMutableArray arrayWithArray:itemsFromGenericQuery]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.songsList.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"TableCellID"; 
    TableCellTitle *tablecell = (TableCellTitle *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
MPMediaItem *song = [self.songsList objectAtIndex:indexPath.row]; 

    NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle]; 
    tablecell.cellSongname.text = songTitle; 

    return tablecell; 
} 

Ich habe ein paar Dinge über

Beteiligung
[song valueForProperty:MPMediaItemPropertyIsCloudItem] 

aber nicht bekommen kann es zu arbeiten, wie ich oben erläutert. Irgendwelche Vorschläge?

+0

I‘ Ich hatte ein ähnliches Problem. Apples Music App filtert alle Songs heraus, die sich nicht auf dem Gerät befinden, wenn Ihr Internet nicht erreichbar ist, und ich glaube nicht, dass es etwas mit "MPMediaItemPropertyIsCloudItem" zu tun hat. Mit dieser Eigenschaft werden nur die Songs abgerufen, die Sie manuell aus der Cloud heruntergeladen haben. Die Music App kann jedoch erkennen, welche Songs in den Cache heruntergeladen wurden, unabhängig davon, ob sie manuell heruntergeladen wurden oder ob der Benutzer sie nur einmal angehört hat . Ich würde auch gerne eine Lösung dafür finden. – sooper

+0

Oder versuchen Sie einfach Songs aus der Cloud herunterzuladen? – sooper

+0

Klingt, als ob wir nach dem gleichen Ding suchen ...;) – ASCJU

Antwort

14

ich es selbst gelöst, indem Sie die folgende Zeile in dem viewDidLoad Verfahren zwischen MPMediaQuery Hinzufügen ... und NSArray ...

[everything addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]]; 
0

Initialisieren Sie MPMediaQuery wie folgt in der ViewDidLoad-Methode.

MPMediaQuery * everything = [MPMediaQuery songsQuery]; 
self.songsList = [everything items]; 
[self.tableView reloadData]; 

und Handy für Index-Methode

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *cellIdentifier = @"TableCellID"; 
    TableCellTitle *tablecell = (TableCellTitle *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    MPMediaItem *anItem = (MPMediaItem *)[self.songsList objectAtIndex: indexPath.row]; 

    if([anItem valueForProperty:MPMediaItemPropertyTitle]) { 
     tablecell.cellSongname.text = [anItem valueForProperty:MPMediaItemPropertyTitle]; 

    } 

    return tablecell; 

} 
+0

Dies gibt immer noch die gleiche Ausgabe - Alles (lokale und "Cloud" Songs) – ASCJU