根视图控制器 Swift

Posted

技术标签:

【中文标题】根视图控制器 Swift【英文标题】:Root View Controller Swift 【发布时间】:2015-06-25 22:49:59 【问题描述】:

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

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)

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

【问题讨论】:

window 在哪里声明?初始化了吗? 假设您有一个 UIWindow 的实例,那么唯一可能的原因是错误指示的 message、message.data 或 message.ata, message 的值为 nil。跨度> 【参考方案1】:

您必须在 ViewController 中重新加载数据 将重新加载放在viewDidAppear() 或类似的东西中

这是一个错误,因为您只是 init 一个控制器,但您的 views 还没有准备好,它们正在被初始化。 在viewDidLoad 之后,您可以拨打您的views,但之前不能。

这就是为什么你的tablenil

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

【讨论】:

这并没有解决它。我确实看到这个函数存在于我的应用程序委托中的表而不是另一个视图。【参考方案2】:

您的委托功能的实现是什么? 将 tableview 放入故事板后,您必须将 tableview 连接到 ViewController.swift。 控制从 tableview 拖动到 viewcontroller 的顶部(黄色圆圈),会有一个黑色弹出窗口,执行两次,每次单击数据源和委托。 然后在 viewcontroller.swift 文件中实现他们在本教程中展示的功能。您不必修改 AppDelegate.swift 文件!

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

【讨论】:

我需要哪种协议?目前我只有@UIApplicationMain 类 AppDelegate: UIResponder, UIApplicationDelegate, 你应该把你所有的函数放在 ViewController.swift 中,如果你想在第一次加载后重新加载,你可以有一个按钮来触发一个调用 reload 的函数。但是第一次你想查看你的 tableview 只需在 ViewController.swift 中实现 tableview 你有多少场景?只是一个内部带有 uitableview 的 uiviewcontroller 吗? 是的,就是这样。一个带有 UItableview 的 viewController。然而,这些函数在视图控制器中的工作方式不同,必须在应用程序委托中。 为什么它们不能在同一个视图控制器中?你的意思是你已经在视图控制器中尝试过它们并且它们不起作用?或者你有理由不希望它们在视图控制器之外?【参考方案3】:

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

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

【讨论】:

以上是关于根视图控制器 Swift的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式设置根视图控制器

Swift - WatchKit:如何将数据返回到根视图控制器?

swift 내부에内容视图控制器를过渡효과를주어바꿀수있는根视图控制器

如何在弹出到根视图 Swift 后立即更改选项卡?

如何以编程方式返回具有全局功能的根视图控制器?

当标签栏点击两次时禁用自动弹出到根视图控制器