我创建了一个新项目,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,出了什么问题?
答案 0 :(得分:3)
欢迎来到SO。
UITableViewController
是一个奇怪的野兽。它只能管理单个表视图,而不能管理其他任何内容。如果您希望视图控制器管理不同视图(标签,按钮等以及表格视图)的组合,请将其设为正常UIViewController
,而不是UITableViewController
。
如果要将视图控制器更改为其他类,则必须更改源文件中的类,然后在Interface Builder的“身份检查器”中选择视图控制器,并在那里更改它的类。这可能是你的计划崩溃的原因。
答案 1 :(得分:1)
你有几个问题。您的ViewController
是UITableViewController
的子集,但您缺少一些必需的方法。此外,在您的故事板中,您没有UITableViewController
,而UIViewController
的{{1}}也有UITableView
。他们不是一回事。
如果你不想删除整个项目并重新开始,那么从这里到达目的地的最快方法是:
ViewController
,如果您真的想坚持这一点),并将其作为UITableViewController
的子类。ViewController
并将其删除。现在你应该好好去。
答案 2 :(得分:0)
您还需要更改故事板,您可能已将新类UITableViewController连接到故事板中的ViewController,这会导致swift调用不存在且崩溃的插座。
答案 3 :(得分:0)
如果您仔细查看崩溃,您会看到类似这样的内容
***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [UITableViewController loadView]加载了" SomeID" nib但没有得到UITableView。'
这意味着如果您在类文件中扩展UITableViewController
,则必须在Storyboard viewcontroller中使用相同的内容。因为UITableViewController
提供了内置UITableView
。