Xcode 8.1 和 unwind segues 有问题

Having problems with Xcode 8.1 and unwind segues

我无法使用最新的 Xcode 8.1 GM 进行 unwind segue。我只是想知道我是唯一一个,还是其他人正在经历同样的事情。我已经像以前一样设置了视图控制器,它在 Xcode 8.0 中工作,但现在我没有运气了。试图清洁等等,但没有任何帮助。我希望其他人也可以在我提交雷达之前对其进行测试...

首先实例化 view controllerview controller 具有以下代码:

@IBAction func unwindToSettingsTableViewController(_ segue: UIStoryboardSegue) {
    print("unwind")
}

我也试过没有下划线,但没有用。 设置这个时,应该能够 ctrl 从文件所有者拖动到退出,并启动展开 segues: 所以要么我做的完全错了(我不这么认为,它以前工作得很好),或者 Xcode 8.1

中有一个错误

我尝试在一个新项目中做同样的事情,然后它工作正常。所以我猜我的项目或故事板文件有问题。

更新

由于故事板中的场景相当小,我只是将其删除,然后重新创建,对视图控制器等使用相同的 类。现在它起作用了。所以拥有完全相同的代码,但一个全新的故事板,让我觉得这是一些错误。

今天早上我也遇到了同样的事情。我的问题是我正在创建的 @IBAction 被翻译成具有不同名称的情节提要,在您的情况下将是:

"unwindToSettingsTableViewControllerWithSegue"

我所做的是删除属性检查器中的 "WithSegue" 部分,一切都按预期进行。我不知道这是一个错误,还是您正在发生的事情。

希望对您有所帮助。

我找到了奇怪行为的原因。它需要对我们如何构建应用程序进行一些解释,以了解其方式和原因。

首先,我们倾向于将它们分成更小的块,而不是拥有大的 ViewController。这样,我们总是知道 "business logic" 在哪里,在哪里可以找到数据源、出口和操作等等。一个典型的 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 放在同一个文件中,它仍然无法正常工作。

解决方案是删除所有扩展,并将所有功能放入 class 本身,然后它就可以正常工作了。意义不大,明明是个bug

我的项目也遇到了同样的问题 - 但它似乎是一个项目范围的错误。

我可以创建一个新项目并且在创建展开转场时没有任何问题,但即使在我当前的项目中仅使用 NavigationController 和两个 ViewController 创建一个新故事板,倒带转场也不会显示在退出按钮上。

这是一个非常烦人的错误,因为它使我的项目戛然而止。