【问题标题】:iTunes directory media item returned in unknown formatiTunes 目录媒体项目以未知格式返回
【发布时间】:2015-12-22 16:12:06
【问题描述】:

我编写了以下函数,它读取我的 iTunes 目录中的媒体项目列表并返回音乐文件。我需要返回“歌曲标题”,但是当我运行它时,返回的项目格式未知。我很确定我需要通过属性过滤器运行它们或使用一些转换来正确获取实际名称。最后,我想以字符串数组的形式输出内容。在附加的屏幕截图中,我只运行了四次循环。谁能指出我缺少的转换?看起来输出是十六进制格式,但不清楚。

      class func readMusicFiles() -> NSMutableArray {
    //var songDecoded:[NSMutableArray]
    let result = NSMutableArray()
    let allSongsQuery:MPMediaQuery = MPMediaQuery.songsQuery();
    let tempArray:NSArray = allSongsQuery.items!;
    for item:AnyObject in tempArray {
        if (item is MPMediaItem) {
            let temp = item as! MPMediaItem;
            if (temp.mediaType != MPMediaType.Music) {
                continue;
            }
            result.addObject(item);
        }
    }
        print(result)
       return result
}

}

输出如下所示

【问题讨论】:

  • 有什么问题?你请求了一个 MPMediaItems 数组,而这正是你得到的。
  • 你说得对。我改正了
  • 我遇到的问题是输出是十六进制格式或 0x1355e4d90 的任何格式
  • 不,不是。它是 MPMediaItems。这正是你想要的。别担心,开心就好。
  • 如何将它们转换为有意义的输出 Matt?我希望它们转换为可读的文本。当我得到像您这样的专家的帮助时,我一点也不担心。

标签: ios swift mpmediaitem mpmediaquery mpmediaitemcollection


【解决方案1】:

“十六进制”不是“格式”;它只是对象的内存地址的指示。忽略它。

您已获得媒体项目(在本例中为歌曲)。现在,不要说print(result),而是询问他们的头衔:

for song in result {
    print(song.title)
}

或者,创建一个新数组:

let titles = result.map {$0.title}

(另外,不要声明你的函数返回一个 NSMutableArray。那是 Cocoa 的事​​情。试着坚持使用 Swift 数组。例如,如果你最终要得到一个标题数组,那么这些是字符串,所以返回[String].)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-01-12
  • 2022-12-10
  • 1970-01-01
  • 2021-10-09
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多