SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil
Posted
技术标签:
【中文标题】SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil【英文标题】:SWIFT fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 【发布时间】:2015-04-19 13:57:27 【问题描述】:我正在尝试运行此快速代码,但它输出以下错误:“致命错误:在展开可选值时意外发现 nil (lldb)”。 这是代码:
//
// PlaySoundsViewController.swift
// Revoice
//
// Created by Leonardo Barazza on 16/04/15.
// Copyright (c) 2015 Leonardo Barazza. All rights reserved.
//
import UIKit
import AVFoundation
class PlaySoundsViewController: UIViewController
var audioPlayer: AVAudioPlayer!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
if var filePath = NSBundle.mainBundle().pathForResource("movie_quote", ofType: "mp3")
var filePathUrl = NSURL.fileURLWithPath(filePath)
audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: nil)
else
println("the filePath is empty")
@IBAction func playSlowly(sender: UIButton)
audioPlayer.play()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
*/
你能帮帮我吗?
提前致谢。
【问题讨论】:
您可能想提供更多信息,调试器究竟在哪里中断。并给你错误。通常,在您的代码预期为非 nil 的地方给出 nil。 不要明确解开在任何情况下都可能为零的东西——除非你想崩溃。 fatal error: unexpectedly found nil while unwrapping an Optional value的可能重复 【参考方案1】:我猜问题出在audioPlayer
属性中:它被定义为隐式展开的AVAudioPlayer
可选,因此无论何时访问它都不能是nil
(否则会抛出运行时异常,因为隐式展开) .
问题是你实际上创建了一个实例 (audioPlayer != nil
) 只有当filePath != nil
。你检查filePath
不为零吗?
顺便说一句,你可以通过使用可选链接来跳过这个问题:
@IBAction func playSlowly(sender: UIButton)
if audioPlayer?.play() == nil
println("audioPlayer is nil")
【讨论】:
【参考方案2】:从问题上方的代码中,您只创建了一个实例变量 audioPlayer: AVAudioPlayer
,带有感叹号 !
。
AVAudioPlayer
、func playSlowly()
的实例。但是您没有显示您的调试器信息,我只能猜测audioPlayer.play()
是错误所在的地方。
我认为代码
if var filePath = NSBundle.mainBundle().pathForResource("movie_quote", ofType: "mp3")
,导致无法定义audioPlayer
的实例。
你应该检查filePath
的定义是否正确。
【讨论】:
以上是关于SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
AVCaptureSession 运行时崩溃。致命错误:在展开可选值 (lldb) 时意外发现 nil
命中致命错误:在展开可选值 (lldb) 时意外发现 nil