我找到了奇怪行为的原因。需要对我们如何构建应用程序进行一些解释,以了解其方式和原因。
首先,我们倾向于将它们拆分成更小的块,而不是拥有大的 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.swift
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 连接起来,但不可能,不会弹出倒带转场。
因此,将所有扩展与 SampleTableViewController 放在同一个文件中,它仍然不起作用。
解决方案是删除所有扩展,并将所有函数放入类本身,然后它可以正常工作。这没有多大意义,这显然是一个错误。