【问题标题】:MPMediaQuery to return local items onlyMPMediaQuery 仅返回本地项目
【发布时间】:2013-10-27 08:10:07
【问题描述】:

我想显示一个仅包含设备上当前歌曲的 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]

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

【问题讨论】:

  • 我也遇到过类似的问题。当您的互联网中断时,Apple 的音乐应用程序会过滤掉所有不在设备上的歌曲,我认为这与 MPMediaItemPropertyIsCloudItem 没有任何关系。此属性只会抓取您从云端手动下载的歌曲,而音乐应用程序能够检测哪些歌曲已下载到缓存中,无论是手动下载还是用户只听过一次.我也想找到解决办法。
  • 或者您只是想找回从云端下载的歌曲?
  • 听起来我们在寻找同样的东西...... ;)

标签: ios objective-c uitableview mpmediaquery


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在 ViewDidLoad 方法中像这样初始化 MPMediaQuery。

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

    索引方法的单元格

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

    【讨论】:

    • 这仍然提供相同的输出 - 一切(本地和“云”歌曲)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2021-03-19
    • 2018-08-29
    相关资源
    最近更新 更多