我想给buttom点击时换图片,用了如图方法,但是每次点击时都中断,提示fatal error: unexpectedly found nil while unwrapping an Optional value。肿么破?

|
 |
你的bgMusic是个UIButton吗?setImage方法本身是接受一个Optional的值(?),是允许传入的图片为nil的,playBgMusic方法检查过没有?
|
 |
bgMusic是一个UIButton
playBgMusic应该是没问题


var playImage=UIImage(named: "play.png")
var buttomState=false
func playBgMusic(){
let musicPath=NSBundle.mainBundle().pathForResource("Music_background", ofType: "mp3")
let url=NSURL(fileURLWithPath: musicPath!)
audioPlayer=AVAudioPlayer(contentsOfURL: url, error:nil)
audioPlayer.numberOfLoops = -1
audioPlayer.volume=1
audioPlayer.prepareToPlay()
audioPlayer.play()
}
|

20分 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。
|
 |

强制解包还是不行啊~
|
 |
那就要看,你的uiimage对象是否被成功创建了。
|
 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
|
 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
|
 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
|
 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
还不行的话,可尝试将图片资源移动到images.xcassets 中来管理图片资源,也建议这么做。
|
 |
你的bgMusic这个Button的约束怎么写的?
|

25分 |
不会是setImage:forStatus:本身的问题,你看看API:
func setImage(image: UIImage?, forState state: UIControlState) // default is nil. should be same size if different for different states
接受的是一个?值,你学过Swift应该知道,这表示该方法支持一个nil值。
问题可能是你的button的约束有问题,导致成功调用setImage后更新了button的布局
|
 |
不会是setImage:forStatus:本身的问题,你看看API:
func setImage(image: UIImage?, forState state: UIControlState) // default is nil. should be same size if different for different states
接受的是一个?值,你学过Swift应该知道,这表示该方法支持一个nil值。
问题可能是你的button的约束有问题,导致成功调用setImage后更新了button的布局
我用的是自动约束, 按理说它optional接受nil,但是为何就中断那句,提示说遇到nil意外
|
 |
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
还不行的话,可尝试将图片资源移动到images.xcassets 中来管理图片资源,也建议这么做。
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
还不行的话,可尝试将图片资源移动到images.xcassets 中来管理图片资源,也建议这么做。
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
还不行的话,可尝试将图片资源移动到images.xcassets 中来管理图片资源,也建议这么做。
改成如下试试:
bgMusic.setImage(UIImage(named:"play.png")! , forState: UIControlState.Normal)
UIImage(named: “”) 返回的是一个optional的uiimage对象。

强制解包还是不行啊~
那就要看,你的uiimage对象是否被成功创建了。
我这张图片存在啊。。为什么会创建失败呢?怎么解决啊
点击项目,找到 build phases, 看这张图片存不存在于 “copy bundle resources” 下,你的这种情况应该是不存在。点击下方的+将图片资源添加进去就可以了。
有这张照片,
还不行的话,可尝试将图片资源移动到images.xcassets 中来管理图片资源,也建议这么做。
移动进去,还是不行
|
 |
感谢两位大神的帮助,我找到我错在哪里了,中途可能不小心丢失了变量和控件的绑定,导致那个bgMusic变量并没有与对应控件成功对应。不好意思浪费你们的时间了,不过还是学了一些检查的方法,谢谢
|