如何更改View Controller的类类型?

时间:2015-06-07 11:52:05

标签: ios xcode swift

我创建了一个新项目,ViewController.swift是:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

我在视图控制器中创建了一个表视图,所以我想将类类型更改为UITableViewController,这就是我所做的:

class ViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

然后程序发出信号SIGABART,出了什么问题?

4 个答案:

答案 0 :(得分:3)

欢迎来到SO。

UITableViewController是一个奇怪的野兽。它只能管理单个表视图,而不能管理其他任何内容。如果您希望视图控制器管理不同视图(标签,按钮等以及表格视图)的组合,请将其设为正常UIViewController,而不是UITableViewController

如果要将视图控制器更改为其他类,则必须更改源文件中的类,然后在Interface Builder的“身份检查器”中选择视图控制器,并在那里更改它的类。这可能是你的计划崩溃的原因。

答案 1 :(得分:1)

你有几个问题。您的ViewControllerUITableViewController的子集,但您缺少一些必需的方法。此外,在您的故事板中,您没有UITableViewController,而UIViewController的{​​{1}}也有UITableView。他们不是一回事。

如果你不想删除整个项目并重新开始,那么从这里到达目的地的最快方法是:

  1. 从项目中删除 ViewController.swift
  2. 从菜单中选择文件 - >新建 - >文件... 。点击 Cocoa Touch Class 然后 Next
  3. 为您的班级命名(ViewController,如果您真的想坚持这一点),并将其作为UITableViewController的子类。
  4. 打开 Main.storyboard 文件。点击ViewController并将其删除。
  5. 拖出一个新的表格视图控制器
  6. 选择TableViewController,然后在右侧的 Identity Inspector 中将类设置为您在步骤3中选择的类名(例如ViewController)。
  7. 属性检查器中,选中是初始视图控制器旁边的框。
  8. 现在你应该好好去。

答案 2 :(得分:0)

您还需要更改故事板,您可能已将新类UITableViewController连接到故事板中的ViewController,这会导致swift调用不存在且崩溃的插座。

答案 3 :(得分:0)

如果您仔细查看崩溃,您会看到类似这样的内容

  

***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [UITableViewController   loadView]加载了" SomeID" nib但没有得到UITableView。'

这意味着如果您在类文件中扩展UITableViewController,则必须在Storyboard viewcontroller中使用相同的内容。因为UITableViewController提供了内置UITableView