在打开一个可选值prepareForSegue时意外地发现了nil

时间:2016-08-08 00:55:47

标签: swift xcode

我是swift的初学者,正在开发一个我正在使用collectionView的项目。从collectionView,我想将一些值传输到详细信息视图,但我得到上面提到的错误。值不是零,但不知何故,它在执行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()
    }

}

3 个答案:

答案 0 :(得分:1)

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

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

  1. DetailsViewController
  2. 中添加字符串属性
  3. preparForsegue功能
  4. 中设置这些字符串属性
  5. viewDidLoad的{​​{1}}中,设置标签
  6. 您的代码应如下所示:

    DetailsViewController

    仔细检查我的代码,我已经很快写完了;)

答案 1 :(得分:0)

目标视图控制器中的IBOutlets不会设置,直到prepareForSegue完成后的某个时间

DetailsViewController中,添加三个实例变量:

var startTime: String?
var line: String?
var details: String?

然后在prepareForSegue中设置这三个值:

vc.details = self.description
vc.line = self.subText
vc.startTime = self.formatted_time

然后在viewDidLoad的{​​{1}}

DetailsViewController

答案 2 :(得分:0)

正如上面的两个答案在您UIViewController时创建prepareForSegue的实例时指出segue.destinationViewController as? DetailsViewController,这并不意味着@IBOutlet }注入或初始化。视图完全加载时会初始化@IBOutlet,因此您可以执行以下两个选项:

  1. UIViewController中创建变量,您可以在UIViewController的{​​{1}}初始化之后保存值,然后在另一个prepareForSegue viewDidLoad() UIViewController 1}}您可以设置@IBOutlet' s的值。
  2. 另一个选项是在创建view的实例时调用let _ = vc.view(例如UIViewController)属性,这样就可以强制视图完全加载负载,你可以从@IBOutlet
  3. 设置prepareForSegue

    我希望这对你有所帮助。