【问题标题】:How to retrieve Artist lists with MPMediaQuery?如何使用 MPMediaQuery 检索艺术家列表?
【发布时间】:2013-01-28 18:33:48
【问题描述】:

您好,我正在尝试使用以下代码在 iOS 中使用 MPMediaQuery 检索艺术家。

在我看来DidLenter code hereoad

MPMediaQuery *query = [MPMediaQuery artistsQuery];
self.arrayOfArtist = [query collections];

在我的cellForRowAtIndexPath

   cell.textLabel.text = [NSString stringWithFormat:@"%@",[[self.arrayOfArtist objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyArtist]];

当我与NSLog 核对时,我的arrayOfArtist 计数约为 330。

但是在我的 UITableView 中,它只显示 NULL

我有什么不妥吗?

【问题讨论】:

    标签: ios cocoa-touch mpmediaquery


    【解决方案1】:

    你应该写:

    cell.textLabel.text = [NSString stringWithFormat:@"%@",[[[self.arrayOfArtist objectAtIndex:indexPath.row] representativeItem] valueForProperty:MPMediaItemPropertyArtist]];
    

    【讨论】:

      【解决方案2】:

      您可以使用代码检索艺术家及其歌曲。

          /// Get all artists and their songs
      ///
      func getAllArtists() {
          let query: MPMediaQuery = MPMediaQuery.artists()
          let allArtists = query.collections
      
          allArtistItems?.removeAll()
      
          guard allArtists != nil else {
              return
          }
      
          for collection in allArtists! {
              let item: MPMediaItem? = collection.representativeItem
      
      
      
      
              let artistName = item?.value(forKey: MPMediaItemPropertyArtist) as? String ?? "<Unknown>"
              let artistId = item!.value(forProperty: MPMediaItemPropertyArtistPersistentID) as! NSNumber
      
              let artist = Artist()
              artist.name = artistName
              artist.artistId = String(describing: artistId)
              print("Artist name: \(artistName)")
      
              // Get all songs of this Artist
              let mediaQuery = MPMediaQuery.songs()
              let predicate = MPMediaPropertyPredicate.init(value: artistId, forProperty: MPMediaItemPropertyArtistPersistentID)
              mediaQuery.addFilterPredicate(predicate)
              let song = mediaQuery.items
      
              if let allSongs = song {
                  var index = 0
      
                  for item in allSongs {
                      let pathURL: URL? = item.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
                      if pathURL == nil {
                          print("@Warning!!! Track : \(item) is not playable.")
                      } else {
                          let trackInfo = SongItem()
                          trackInfo.index = index
                          trackInfo.mediaItem = item
      
                          let title = item.value(forProperty: MPMediaItemPropertyTitle) as? String ?? "<Unknown>"
                          let artistName = item.value(forProperty: MPMediaItemPropertyArtist) as? String ?? "<Unknown>"
                          trackInfo.songName = title
                          trackInfo.artistName = artistName
      
                          trackInfo.isSelected = false
                          trackInfo.songURL = item.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
                          artist.songs?.append(trackInfo)
                          index += 1
                      }
                  }
      
              }
      
              // Finally add the album object to albums array
              allArtistItems?.append(artist)
      
          }
      
      
          print("Total Artist count: \(allArtistItems?.count)")
      
      }
      

      【讨论】:

      • 老兄,这是一个关于目标C的问题,为什么要快速给出答案?
      • 逻辑保持不变。我相信,任何需要帮助的人都可以将此代码转换为 Objc。请告诉我,我也可以这样做。
      • 你好。你能给我一个教程或示例代码的链接,以从我的 iPhone 库(如 Apple 的音乐应用程序)中获取艺术家列表吗?带有部分:A、B、C...以及与部分(艺术家姓名)对应的行,这正是 Apple 音乐应用程序所做的。不可能找到完整的代码来理解它是如何工作的。没有信息。生无可恋。我会感谢你的帮助。谢谢。
      • 嗯,有信息:Apple 文档。但是我要么很笨,要么我没有办法编写代码来实现某些目标。我只实现了在 TableView 中显示歌曲。
      【解决方案3】:

      您需要获取艺术家属性,然后将其保存在数组中。如果您尝试在标准数组上使用 valueForProperty 方法,则它无法正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 2011-05-22
        相关资源
        最近更新 更多