Xcode 8.1 和 unwind segues 有问题
Having problems with Xcode 8.1 and unwind segues
我无法使用最新的 Xcode 8.1
GM 进行 unwind segue。我只是想知道我是唯一一个,还是其他人正在经历同样的事情。我已经像以前一样设置了视图控制器,它在 Xcode
8.0 中工作,但现在我没有运气了。试图清洁等等,但没有任何帮助。我希望其他人也可以在我提交雷达之前对其进行测试...
首先实例化 view controller
的 view 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 创建一个新故事板,倒带转场也不会显示在退出按钮上。
这是一个非常烦人的错误,因为它使我的项目戛然而止。
我无法使用最新的 Xcode 8.1
GM 进行 unwind segue。我只是想知道我是唯一一个,还是其他人正在经历同样的事情。我已经像以前一样设置了视图控制器,它在 Xcode
8.0 中工作,但现在我没有运气了。试图清洁等等,但没有任何帮助。我希望其他人也可以在我提交雷达之前对其进行测试...
首先实例化 view controller
的 view 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 创建一个新故事板,倒带转场也不会显示在退出按钮上。
这是一个非常烦人的错误,因为它使我的项目戛然而止。