致命错误:使用 AVAudio 展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】致命错误:使用 AVAudio 展开可选值时意外发现 nil【英文标题】:fatal error: unexpectedly found nil while unwrapping an Optional value using AVAudio 【发布时间】:2014-12-25 21:32:09 【问题描述】:我有两个项目,使用相同的代码,但下面一行:
player = AVAudioPlayer(contentsOfURL: NSURL(string: fileLocation), error: &error)
仅在其中一个项目中返回此错误:
fatal error: unexpectedly found nil unwrapping an Optional value
另一个项目运行没有错误。
我正在尝试播放声音。
import UIKit
import AVFoundation
class ViewController: UIViewController
var player:AVAudioPlayer = AVAudioPlayer()
override func viewDidLoad()
super.viewDidLoad()
var fileLocation = NSString(string: NSBundle.mainBundle().pathForResource("halloweenmp3", ofType: "mp3")!)
var error: NSError? = nil
player = AVAudioPlayer(contentsOfURL: NSURL(string: fileLocation), error: &error)
player.play()
在两个项目中,相同的 mp3 文件已添加到项目中,但一个项目会播放声音,而另一个项目会返回错误。
给我错误的项目确实有其他代码,但错误似乎只与上面提到的行有关,所以我看不出项目中的其他代码是如何导致它的。
我尝试复制容易出错的项目并获得相同的结果。我创建了新项目并使用上面使用的相同代码并让它工作。我不确定项目是否以某种方式损坏或项目中的其他代码导致错误,即使它没有在调试器中被引用。
我可以在 xCode 的文件导航器中预览 mp3 文件,这样它就可以正常工作。
【问题讨论】:
您应该检查文件 URL 字符串并确保它不是nil
。然后检查NSURL
并确保它不是nil
。每当您收到“意外发现nil
”错误时,您只需检查每个对象并找出哪个是nil
。可能是捆绑包中缺少文件。可能是拼写错误或大小写错误。
@Rob 很到位。当您从包含多个操作的代码行中遇到错误时,可以将它们分开以跟踪问题。
我终于决定开始一个新项目,重写代码并且成功了。我的对象都不是nil
,所以我不知道问题出在哪里。感谢您的帮助。
【参考方案1】:
将NSURL(String:)
更改为NSURL(fileURLWithPath:)
对我有用。
【讨论】:
【参考方案2】:你可以这样做:
-
在您的项目视图中,点击您的项目名称
选择您的目标并选择“构建阶段”选项卡
将您的 mp3 文件拖到“复制包”中
资源”部分
【讨论】:
天哪,老兄,我差点以为这是一种魔法,但现在看来太愚蠢了。为什么 Xcode 不会自动将 mp3 源包含到编译包中?以上是关于致命错误:使用 AVAudio 展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:在展开可选值时意外发现 nil - 使用 UITableView