Root View Controller Swift

时间:2015-06-25 22:50:00

标签: ios swift uitableview uiviewcontroller appdelegate

我的app委托中有一个函数,它将一个项目附加到我名为ViewController.swift的文件中的数组中,然后我想在同一个文件中重新加载一个tableview。我试图这样做:

let vc = ViewController()
let navigationController = UINavigationController(rootViewController: vc)
window!.rootViewController = navigationController
println(vc.messages)

//1        vc.messages.append(message.data.message as! String)
//2        vc.MessageTableView?.reloadData()

编号为1,2的行是我设置断点的地方。它似乎在编号为2的行后断开。

我得到的确切错误是

  

致命错误:在解包可选值时意外发现nil

我认为我的问题是我错误地设置了根视图控制器。

编辑#1

窗口被声明为最佳。

如果我像这样运行我的代码:

    let vc = ViewController()
    messages.append(message.data.message as! String)
    vc.MessageTableView?.reloadData()
    println(messages)

然后我可以看到正确的数据被放入数组(我为这个场景设置了全局数据),但是表格没有在View控制器中更新。

3 个答案:

答案 0 :(得分:0)

您的委托功能的实施是什么? 将tableview放在storyboard中之后,必须将tableview连接到ViewController.swift。 控制从tableview拖动到viewcontroller的顶部(yellowcircle),会有一个黑色弹出窗口,这样做两次,每次都点击datasource和delegate。 然后在viewcontroller.swift文件中实现它们在本教程中显示的函数。您不必修改AppDelegate.swift文件!

https://www.weheartswift.com/how-to-make-a-simple-table-view-with-ios-8-and-swift/

答案 1 :(得分:0)

您必须在ViewController内重新加载数据 将重新加载放在viewDidAppear()内或者像那样

这是一个错误,因为您只是init一个控制器,但您的views尚未就绪,它们正在初始化。 在viewDidLoad之后,您可以拨打views,但不能在之前拨打电话。

这就是为什么tablenil

的原因

除此之外,即使您没有看到它,为什么还需要重新加载table,对吧?

答案 2 :(得分:0)

如果你想让viewcontroller成为rootviewcontroller你需要做的是点击storyboard中的viewcontroller,然后点击utilities->属性检查器 - >选中“是初始视图控制器”框

https://www.dropbox.com/s/qfd9jqeos7ueq1w/Screen%20Shot%202015-06-25%20at%207.40.46%20PM.png?dl=0