【问题标题】:My app crashes when the file has played (Swift)文件播放后我的应用程序崩溃(Swift)
【发布时间】:2015-05-19 02:10:04
【问题描述】:

文件播放后,应用程序崩溃,我收到此错误:

-[fefef.ViewController lavEnFunktionDerSkifterTitle(sender as!UIButton)]: 无法识别的选择器发送到实例 0x7f9883785f40

我该如何解决?

这是我的代码:

@IBAction func play(sender: AnyObject) {

    musikAfspiller("wwww.myurl.com")
    lavEnFunktionDerSkifterTitle(sender as! UIButton)
}

func musikAfspiller (url: String) {

    let playerItem = AVPlayerItem( URL:NSURL( string:url ) )

    player = AVPlayer(playerItem:playerItem)

    player.play()

    NSNotificationCenter.defaultCenter().addObserver(self, selector:"lavEnFunktionDerSkifterTitle()",name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
}

func lavEnFunktionDerSkifterTitle(sender: UIButton) {

    if counter == 1 {

        counter = 2

        sender.setTitle("Stop", forState: UIControlState.Normal)

    } else {

        counter = 1
        sender.setTitle("Play", forState: UIControlState.Normal)

    }
}

【问题讨论】:

  • 你用的是iOS模拟器吗?还是在实际的 iPhone 上?如果在 iOS 模拟器上,你是在 Mac Mini 上运行吗?
  • define : NSNotificationCenter.defaultCenter().addObserver(self, selector:"lavEnFunktionDerSkifterTitle:",name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
  • 我在 macbook pro 和 iPhone 上都使用模拟器。应用仍然崩溃。
  • 写 NSNotificationCenter.defaultCenter().addObserver(self, selector:"lavEnFunktionDerSkifterTitle:",name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem) 而不是 NSNotificationCenter.defaultCenter().addObserver(self, selector:"lavEnFunktionDerSkifterTitle ()",名称:AVPlayerItemDidPlayToEndTimeNotification,对象:playerItem)

标签: ios iphone swift


【解决方案1】:

观察者声明的语法应该是:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "lavEnFunktionDerSkifterTitle:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)

并且接收函数应该在这个语法中的 viewDidLoad() 函数之外:

func lavEnFunktionDerSkifterTitle(notification: NSNotification) {}

【讨论】:

    【解决方案2】:

    发送通知时,选择器声明不应有括号,请使用:

     NSNotificationCenter.defaultCenter().addObserver(self, selector:"lavEnFunktionDerSkifterTitle",name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
    

    接收通知的函数的签名也应该是这样的:

    func lavEnFunktionDerSkifterTitle(notification: NSNotification) 
    

    更多关于 NSNotification 的细节可以在here找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      相关资源
      最近更新 更多