【问题标题】:MPMediaItemPropertyTitle with MPMediaPlayer and Podcast causes Fatal Error带有 MPMediaPlayer 和 Podcast 的 MPMediaItemPropertyTitle 导致致命错误
【发布时间】:2017-02-19 00:53:34
【问题描述】:

我的 MPMediaplayer 可以很好地播放音乐,但是当我开始使用 Podcast 时,情况就不同了。

我试图得到两件事: 1)播客标题的名称(“美国生活”) 2) 剧集标题(“我的假期”)

这行代码可以很好地获取 Podcast 标题:

let podTitle:String = (myMP.nowPlayingItem?.podcastTitle)!

然而,这一行应该得到剧集标题:

let episode:String = myMP.nowPlayingItem?.value(forProperty: "MPMediaItemPropertyTitle") as! String

但会导致崩溃并出现此错误:

致命错误:在展开可选值时意外发现 nil

如何获取给定 Podcast 的剧集标题?

【问题讨论】:

    标签: swift3 ios10 mpmediaplayercontroller


    【解决方案1】:

    MPMediaItemPropertyTitle 不是字符串属性键;它是一个常量的名称,其 value 是属性键。那么,你在哪里

    let episode:String = 
      myMP.nowPlayingItem?.value(forProperty: "MPMediaItemPropertyTitle") as! String
    

    ...去掉引号:

    let episode:String = 
      myMP.nowPlayingItem?.value(forProperty: MPMediaItemPropertyTitle) as! String
    

    我认为你所做的仍然很愚蠢(你要求崩溃),但至少这样你就有成功的机会。我做的其实更像是这样的:

    let temp = myMP.nowPlayingItem?.value(forProperty: MPMediaItemPropertyTitle)
    let episode = temp as? String ?? ""
    

    这样你总是得到一个字符串,如果有问题,它可能是空的,你不会崩溃。

    【讨论】:

    • 真正吸引我的是引号——我很确定你在 ObjC 中需要它们,所以我想我也必须在 Swift 中使用它们。谢谢!
    • 您不需要“在 ObjC 中使用它们”。这是关于 MediaPlayer 框架,而不是您使用的语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多