Ios 无法将NSMutableArray类型的值分配给UIBarButtonItem类型

Ios 无法将NSMutableArray类型的值分配给UIBarButtonItem类型,ios,swift,Ios,Swift,我正在开发一个iOS音频应用程序作为一个学习项目。我在其中一个函数中遇到问题,该函数检查播放机是否正在播放或暂停/停止。如果正在播放,则应将按钮栏中的按钮更改为“暂停”按钮;如果已暂停或停止,则应将按钮更改为“播放”按钮。我将按钮栏项目作为NSMutableArray分配给变量“items”,然后对按钮进行必要的更改,然后将“items”分配回按钮栏项目以更新显示 在我的代码中,有一行出现错误: self.toolbar.items = items 错误消息是 无法将NSMutableArra

我正在开发一个iOS音频应用程序作为一个学习项目。我在其中一个函数中遇到问题,该函数检查播放机是否正在播放或暂停/停止。如果正在播放,则应将按钮栏中的按钮更改为“暂停”按钮;如果已暂停或停止,则应将按钮更改为“播放”按钮。我将按钮栏项目作为NSMutableArray分配给变量“items”,然后对按钮进行必要的更改,然后将“items”分配回按钮栏项目以更新显示

在我的代码中,有一行出现错误:

self.toolbar.items = items
错误消息是

无法将NSMutableArray类型的值分配给UIBarButtonItem类型

我假设我需要转换NSMutableArray,我尝试过使用Array,当我这样做时,错误消失了,但按钮断开了

我的代码的相关部分包括:

@IBOutlet weak var toolbar: UIToolbar!

@IBOutlet var playButton: UIBarButtonItem!


@IBAction func playPausePressed(sender: AnyObject) {
    let playbackState = self.player.playbackState as MPMusicPlaybackState
    let items = NSMutableArray(array: self.toolbar.items!)
    if playbackState == .Stopped || playbackState == .Paused{
        self.player.play()
        items[2] = self.pauseButton
    } else if playbackState == .Playing{
        self.player.pause()
        items[2] = self.playButton
    }
    self.toolbar.items = items
}
任何帮助或指导都将不胜感激。
谢谢

我觉得你可以做得更好。您真的需要为您的
项目[2]
在两个不同的按钮之间切换吗


UIBarButtonItem
可以像常规的
UIButton
一样使用不同的状态。我假设您希望在播放器暂停/播放时在播放和暂停图像之间切换。你可以通过在你的UIBarButtonim中设置两个不同的图像(
setBackgroundImage(u:forState:barMetrics:)
),然后在你的playbackState更改时设置适当的状态来实现这一点。

我觉得你可以做得更好。您真的需要为您的
项目[2]
在两个不同的按钮之间切换吗


UIBarButtonItem
可以像常规的
UIButton
一样使用不同的状态。我假设您希望在播放器暂停/播放时在播放和暂停图像之间切换。您可以通过将两个不同的图像设置到UIBarButtonim(
setBackgroundImage(\uOfState:barMetrics:)
),然后在playbackState更改时设置适当的状态来实现此目的。

发生错误的原因是
NSMutableArray
与Swift
Array

为什么不直接使用本机属性?由于引用语义,不需要创建临时数组

@IBAction func playPausePressed(sender: AnyObject) {
    let playbackState = self.player.playbackState as MPMusicPlaybackState
    var items = self.toolbar.items!
    if playbackState == .Stopped || playbackState == .Paused{
        self.player.play()
        items[2] = self.pauseButton
    } else if playbackState == .Playing{
        self.player.pause()
        items[2] = self.playButton
    }
}

发生此错误的原因是
NSMutableArray
与Swift
Array

为什么不直接使用本机属性?由于引用语义,不需要创建临时数组

@IBAction func playPausePressed(sender: AnyObject) {
    let playbackState = self.player.playbackState as MPMusicPlaybackState
    var items = self.toolbar.items!
    if playbackState == .Stopped || playbackState == .Paused{
        self.player.play()
        items[2] = self.pauseButton
    } else if playbackState == .Playing{
        self.player.pause()
        items[2] = self.playButton
    }
}

playButton是在脚本编辑器中创建的。pauseButton被声明为ViewController类var pauseButton:uiBarButtonim中的变量!playButton是在脚本编辑器中创建的。pauseButton被声明为ViewController类var pauseButton:uiBarButtonim中的变量!这种方法对我有效,谢谢!我添加了一些代码来设置系统项属性,之后效果很好!这种方法对我有效,谢谢!我添加了一些代码来设置系统项属性,之后效果很好!这种方法对我很有效,唯一的缺点是使用带有两个而不是一个按钮的房地产。但它确实让我看到了这个功能,谢谢!这种方法对我很有效,唯一的缺点是使用带有两个而不是一个按钮的房地产。但它确实让我看到了这个功能,谢谢!