Ios 如何从func viewDidLoad在我的故事板中初始化UILabel?
这里我为testview控制器调用init。我做错了什么?我纠正了几个小时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
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中连接了吗?如果不是,我肯定你的应用程序会崩溃。我可以发送你的电子邮件截图吗?