8

我想显示一个 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]

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

4

2 回答 2

15

我通过在 MPMediaQuery... 和 NSArray... 之间的 viewDidLoad 方法中添加以下行自己解决了这个问题

[everything addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]];
于 2013-10-21T10:09:33.230 回答
0

在 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;

}
于 2013-10-18T13:35:21.250 回答