MPMediaQuery仅返回本地项目

我想显示一个UITableView,只显示设备上当前的歌曲。

如果我查询所有项目我(显然)获得所有项目,包括我购买但未下载的项目。 这是代码的(部分)

@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; } 

我已经阅读了一些关于涉及的事情

 [song valueForProperty:MPMediaItemPropertyIsCloudItem] 

但是不能像我上面解释的那样让它工作。 有什么建议么?

我通过在MPMediaQuery …和NSArray之间的viewDidLoad方法中添加以下行来解决它…

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

在ViewDidLoad方法中初始化MPMediaQuery。

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

和Cell for Index方法

 - (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; }