swift - 在展开可选值 prepareForSegue 时意外发现 nil

标签 swift xcode

我是 swift 的初学者,正在从事一个使用 collectionView 的项目。从 collectionView 中,我想将一些值传输到详细信息 View ,但出现上述错误。值不是 nil 但不知何故,它在执行 segue 时给出了这个错误。任何人都可以帮助我,我被困在这里。

//In my CollectionView Controller.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if(segue.identifier == "DetailsView")
    {
        if let vc:DetailsViewController = segue.destinationViewController as? DetailsViewController
            {
                vc.details.text = self.description
                vc.line.text = self.subText
                vc.startTime.text = self.formatted_time
        }
}
}

//DetailsViewController
import UIKit

class DetailsViewController: UIViewController {

    @IBOutlet var startTime: UILabel!
    @IBOutlet var line: UILabel!
    @IBOutlet var details: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()  
    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()
    }

}

最佳答案

这基本上意味着您的 IBOutlets 尚未初始化。

您应该设置字符串,然后在 viewDidLoad 中设置标签。 总结一下:

  1. DetailsViewController 中添加字符串属性
  2. 在您的 preparForsegue 函数中设置这些字符串属性
  3. DetailsViewControllerviewDidLoad 中,设置标签

您的代码应如下所示:

//In my CollectionView Controller.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.identifier == "DetailsView")
    {
        if let vc:DetailsViewController = segue.destinationViewController as? DetailsViewController
        {
            vc.detailsString = self.description
            vc.lineString = self.subText
            vc.startTimeString = self.formatted_time
        }
    }
}

//DetailsViewController
import UIKit

class DetailsViewController: UIViewController {

    @IBOutlet var startTime: UILabel!
    @IBOutlet var line: UILabel!
    @IBOutlet var details: UILabel!

    var startTimeString: String?
    var lineString: String?
    var detailsString: String?

    override func viewDidLoad() {
        super.viewDidLoad()


        startTime.text = tmpStartTimeString
        line.text = tmpLineString
        details.text = tmpDetailsString

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()
    }

}

仔细检查我的代码,我写得很快 ;)

关于swift - 在展开可选值 prepareForSegue 时意外发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819950/

相关文章:

ios - Xcode 10 : Load the same . 项目目标和单元测试目标中的xml文件

ios - 更改 UITextField 宽度?

ios - 如何启用/禁用来 self 的应用程序的推送通知

ios - 包含具有滚动功能的文本字段

ios - 在新的 Firebase 4.0 版本中获取数据库引用

ios - Swift MVVM 绑定(bind)(使用装箱)

ios - 在我的应用程序关闭后保存变量(快速)

iOS Storyboard - TableView 嵌入在具有动态高度的容器中

arrays - 单击collectionView转到另一个具有不同数组的collectionView

ios - 使用 Swift SpriteKit 时出现错误 "Thread 1: EXC_BAD_INSTRUCTION (code = EXC_1386_INVOP, subcode = 0x0)"