2016-10-26 21 views
4

我无法放松继续使用最新的Xcode 8.1 GM。我只是想知道如果我是唯一的人,还是有别的人经历过。我已经设置了视图控制器,它在Xcode 8.0,但现在我没有运气。试图清理等,但没有任何帮助。我希望别人可以测试它,以及之前我提起雷达......Xcode 8.1和unwind segues出现问题

view controller首先实例化的view controller是有下面的代码:

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

我也试过没有底线,但这并没有帮助。 当设置这个,应该能够ctrl从文件所有者拖动到退出,并起床unwind segues: No unwind segue showing up here... 所以要么我做它完全错误(我不这么认为,它以前工作得很好),或者有一个错误Xcode 8.1

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

更新

由于故事板都抱着相当小场面,我只是删除它,然后再重新创建它,使用相同的类视图控制器等。现在它起作用了。因此,具有完全相同的代码,但新的故事板,使我认为这是一个错误。

+0

如果您阅读了这个问题,您会看到我从文件所有者中拖动并退出,屏幕截图中显示了相同内容。关于以编程方式添加视图,你真的错了。从故事板连接起来,它工作得很好。 –

回答

2

我发现了奇怪行为的原因。它需要一些关于我们如何构建我们的应用程序来理解这些问题的解释。

首先,我们倾向于将它们分成更小的块,而不是具有大的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放在同一个文件中,它仍然不起作用。

解决方法是删除所有的扩展名,并将所有的函数放入类本身,然后它就像它应该那样工作。这没什么意义,这显然是一个错误。

+0

对我而言,只需将扩展移回到同一个文件即可解决问题。显然是一个可怕的错误。希望尽快修复。 –

+0

我停止使用segues,而是去了由Objc.io Swift Talk第5集中Chris Evid和Florian Kugler解释的Flow Coordinator模型。https://talk.objc.io/episodes/S01E05-connecting-view-控制器 –

+0

@GJNilsen,这个愚蠢的bug仍然存在于xCode 8.3.3中......我遇到了同样的问题,并且从头开始多次,才发现在类中移动扩展类最终让我做了一个放松通过Ctrl +拖动到退出...这真的很烦人 – Pangu

1

今天早上我发生了同样的事情。我的问题是,我是创造@IBAction,得到翻译成一个不同的名字,故事板而你的情况将是:

“unwindToSettingsTableViewControllerWithSegue”

enter image description here

我所做的是删除属性检查器中的“WithSegue”部分,并且一切按预期工作。我不知道这是一个错误,还是发生在你身上的事情。

希望它有帮助。

+0

感谢您的提示。这对我没有多大帮助,但至少我知道我不是唯一能够对抗故事板的人。 –

0

我与我的项目有同样的问题 - 但它似乎是一个项目范围的错误。

我可以创建一个新项目,并且在创建展开顺序时没有任何问题,但是即使在当前项目中仅使用NavigationController和两个ViewController创建新的Storyboard,也不会在退出按钮上显示回退Segue。

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