致命错误:使用 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 - 为啥?

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

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

Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?

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