我发现了奇怪行为的原因。它需要一些关于我们如何构建我们的应用程序来理解这些问题的解释。
首先,我们倾向于将它们分成更小的块,而不是具有大的ViewController。这样,我们总是知道“业务逻辑”在哪里,在哪里可以找到数据源,网点和操作等等。典型TableViewController由这样的:
SampleTVC.swift
class SampleTableViewController: UITableViewController {
@IBOutlet var someLabel: UILabel!
@IBOutlet var someButton: UIButton!
@IBAction func unwindHere(_ segue: UIStoryBoardSegue) {
doSomething()
}
}
SampleDelegate + DataSource.swift
extension SampleTableViewController {
override func numberOfSections(in tableView: UITableView) -> Int
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
}
SampleFetchedResultsController。迅速
extension SampleTableViewController: NSFetchedResultsControllerDelegate {
var fetchedResultsController: NSFetchedResultsController<Item>
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for type: NSFetchedResultsChangeType)
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
}
我想在这里连接起来的代码与TVC由这些小位的,没办法,不倒带SEGUE弹出。
因此,将所有扩展与SampleTableViewController放在同一个文件中,它仍然不起作用。
解决方法是删除所有的扩展名,并将所有的函数放入类本身,然后它就像它应该那样工作。这没什么意义,这显然是一个错误。
如果您阅读了这个问题,您会看到我从文件所有者中拖动并退出,屏幕截图中显示了相同内容。关于以编程方式添加视图,你真的错了。从故事板连接起来,它工作得很好。 –