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

Posted

技术标签:

【中文标题】IOS Swift 致命错误:在展开可选值时意外发现 nil【英文标题】:IOS Swift fatal error: unexpectedly found nil while unwrapping an Optional value 【发布时间】:2015-08-06 14:34:16 【问题描述】:

我是ios编程和整个编程的初学者。

(我有一个 XCODE 6.4)

我的 TableViewController 中有一个代码,其中有一个数据,我想将其传递给另一个 viewController。我在互联网上阅读了很多关于它的内容,而不是我编写了这段代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! formule



    let formuleCommand = formulesList[indexPath.row]

    // Configure the cell...

    var shortCut = formuleCommand.formuleText

    cell.formuleLabel.text = shortCut



    return cell







var valueToPass:String!

func tablView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
    println("You selected cell #\(indexPath.row)!")

    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow();
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;

    let identifier = "formuleTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath!) as! formule

    valueToPass = cell.formuleLabel.text
    performSegueWithIdentifier("detail", sender: self)



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

    if (segue.identifier == "detail") 

        // initialize new view controller and cast it as your view controller
       var viewController = segue.destinationViewController as! specialitiesViewController
        // your new view controller should have property that will store passed value
        viewController.passedValue = valueToPass
    


在我的 TableViewController 中,我有单元格,其中包含带有一些数据的标签。我想将此标签中的数据传递给另一个 ViewController。当我运行我的应用程序时,没有错误,但是当我单击一个单元格时,它必须将我移动到另一个 ViewController(我为此设置了一个 segue)打印一个错误:fatal error: unexpectedly found nil while unwrapping an Optional value 和应用程序崩溃。请帮我解决这个错误!

感谢您的建议!

【问题讨论】:

【参考方案1】:

你已经将valueToPass 定义为一个隐式展开的可选 - 即,你告诉 iOS 这里总是会有一个值。

所以当prepareForSegue 被调用,而你还没有设置valueToPass 任何东西时,它会失败。你应该用一些值来初始化它。

【讨论】:

【参考方案2】:

我建议使用此代码打开您的视图控制器(如果您有要打开的 VC 的类)。

let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("your_Storyboard_id") as! Your_VC_Class
        self.navigationController?.pushViewController(viewController, animated: true)

【讨论】:

【参考方案3】:

如果您在初始化时不知道valueToPass 的值,但可能在稍后的某个时间知道该值,您应该将 valueToPass 设为可选:

var valueToPass: String?

...然后在需要时将其解包并处理未正确初始化的情况。

如果您在初始化时不知道valueToPass 的值,但在视图控制器出现时知道该值,那么您应该将其保留为隐式展开的可选(即按原样),但请确保在使用前将其设置为有效值。

旁注:一般来说as?as! 对我们更好,并处理演员表不起作用的情况。

【讨论】:

以上是关于IOS Swift 致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”

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

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

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

swift 2 致命错误:在展开可选值时意外发现 nil - 类别名称

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