Ios 如何从func viewDidLoad在我的故事板中初始化UILabel?

Ios 如何从func viewDidLoad在我的故事板中初始化UILabel?,ios,swift,Ios,Swift,这里我为testview控制器调用init。我做错了什么?我纠正了几个小时 class FilmTableViewController: UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate { @IBOutlet var searchBar: UISearchBar! @IBOutlet weak var tableViewFilm: UITableView! var request: Request? v

这里我为testview控制器调用init。我做错了什么?我纠正了几个小时

class FilmTableViewController: UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate {


@IBOutlet var searchBar: UISearchBar!
@IBOutlet weak var tableViewFilm: UITableView!

var request: Request?
var filmObj: Film?
var arrayFilm = [Film?]()
var imageFilm: UIImage!


override func viewDidLoad() {

    super.viewDidLoad()
    searchBar.delegate = self
    tableViewFilm.delegate = self
    tableViewFilm.tableFooterView = UIView(frame: CGRectZero)
    tableViewFilm.backgroundColor = UIColor(red: 36.0/255, green: 49.0/255, blue: 65.0/255, alpha: 1.0)
    var str = "Hello"
    var str2 = "World"
    TestViewController(film: str, str: str2)


}}
但此时应用程序崩溃。我不明白为什么

class TestViewController: UIViewController {

@IBOutlet weak var labelOne: UILabel!

@IBOutlet weak var label2: UILabel!


init(film: String, str: String) { // here film and str not equal nil
    self.labelOne.text = film  // crashes here "found nil"
    self.label2.text = str
    super.init(nibName: nil, bundle: nil)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()

}
}

可能无法将init调用到vievdidload?我在Interface builder中连接了所有IBoutlet。

将您的
TestViewController
更新为

class TestViewController: UIViewController {

    @IBOutlet weak var labelOne: UILabel!

    @IBOutlet weak var label2: UILabel!

    var film: Film?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.labelOne.text = film?.title
    }
}
由于您的
TestViewController
是在故事板中定义的,因此您需要按照以下方式对其进行初始化:

if let viewC = UIStoryboard(name: "YOUR_STORYBOARD_NAME", bundle: nil).instantiateViewControllerWithIdentifier("ID_OF_TEST_VIEW_CONTROLLER") as? TestViewController {
        // your TestViewController should be correctly initialised now
        // and now you can add the film object to it
        viewC.film = YOUR_MOVIE
}
您需要使用
TestViewController
的脚本ID,而不是\u TEST\u VIEW\u CONTROLLER的ID

通过这种方式,如果使用segues,您还可以轻松准备要显示的
TestViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let viewC = segue.destinationViewController as? TestViewController {
        viewC.film = YOUR_MOVIE
    }
}

什么是撞车日志?要初始化哪个标签?只需在调用
super
后,将行
self.labelOne.text=string.title
init
移动到
viewDidLoad
!标题来自哪里?@Zept我添加了另一个版本,它使用了一个方便的初始值设定器,并且更加优雅。你也可以试试:)好的,我现在就试试:)谢谢!你真的帮了我。我花了几个小时来实现uiviewcontroller.omg的init。尝试初始化viewcontroller时,我没有。我在viewDidLoad中调用了tableviewcontroller中的TestViewController(movie),我的应用程序崩溃,日志为:致命错误:在展开可选值时意外发现nil。但是当设置Breakpoin在
init(film:film){
my movie not equal nil…@Zept你确定你的所有iboutlet都在Interface builder中连接了吗?如果不是,我肯定你的应用程序会崩溃。我可以发送你的电子邮件截图吗?