【问题标题】:Having problems with Xcode 8.1 and unwind seguesXcode 8.1 和 unwind segues 有问题
【发布时间】:2017-03-08 22:08:40
【问题描述】:

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

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

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

我也尝试过不使用下划线,但这并没有帮助。 设置时,应该可以将ctrl 从文件所有者拖动到退出,然后启动展开序列: 所以要么我做错了(我不这么认为,它以前工作得很好),要么Xcode 8.1中存在错误

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

更新

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

【问题讨论】:

  • 如果您阅读了这个问题,您会看到我确实从文件所有者那里拖动并退出,屏幕截图中也显示了相同的内容。而且您以编程方式添加视图确实是错误的。从故事板连接它时它工作得很好。

标签: ios swift xcode segue unwind-segue


【解决方案1】:

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

“unwindToSettingsTableViewControllerWithSegue”

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

希望对你有帮助。

【讨论】:

  • 感谢您的提示。它对我没有多大帮助,但至少我知道我不是唯一需要与故事板战斗的人。
【解决方案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.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 放在同一个文件中,它仍然不起作用。

解决方案是删除所有扩展,并将所有函数放入类本身,然后它可以正常工作。这没有多大意义,这显然是一个错误。

【讨论】:

  • 对我来说,只需将扩展名移回同一文件即可解决问题。显然是一个可怕的错误。希望尽快修复。
  • 我完全停止使用 segue,而是使用了由 Chris Eidhof 和 Florian Kugler 在 Objc.io Swift Talk 第 5 集中解释的 Flow Coordinator 模型。talk.objc.io/episodes/S01E05-connecting-view-controllers
  • @GJNilsen,xCode 8.3.3 中仍然存在这个愚蠢的错误!!..我遇到了同样的问题,从头开始多次,最终发现在类本身中移动了扩展类允许我通过 Ctrl+Dragging to Exit 进行放松转场...这真的很烦人
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多