Swift 在“之间”更改故事板分段“种类”;“显示”;及;ShowDetail";:为什么在运行模拟器时更改不生效?

Swift 在“之间”更改故事板分段“种类”;“显示”;及;ShowDetail";:为什么在运行模拟器时更改不生效?,swift,ios9,xcode7,Swift,Ios9,Xcode7,首先,请注意,这不是一个关于“如何完成我的应用程序?”或“为什么我的应用程序不工作?”的问题,而是一个我在玩一个简单的应用程序时偶然发现的问题,我无法解释。也许SO的某个人可以解释为什么会发生这种明显的问题 为了学习,我一直在玩一个简单的应用程序,它包含一个UITableViewController嵌入到导航控制器中。从表格视图单元格(UITableViewCell的子类UITableViewCell)可以导航到简单的UIViewController。请参见下面应用程序的情节提要概述,并注意,

首先,请注意,这不是一个关于“如何完成我的应用程序?”或“为什么我的应用程序不工作?”的问题,而是一个我在玩一个简单的应用程序时偶然发现的问题,我无法解释。也许SO的某个人可以解释为什么会发生这种明显的问题


为了学习,我一直在玩一个简单的应用程序,它包含一个
UITableViewController
嵌入到
导航控制器中。从表格视图单元格(UITableViewCell的子类
UITableViewCell
)可以导航到简单的
UIViewController
。请参见下面应用程序的情节提要概述,并注意,这显示了在设置表视图单元格到视图控制器之间的顺序转换之前应用程序(开发)的状态

现在,在我的应用程序中,我测试了表视图单元格和视图控制器之间的两种不同类型的分段,即

  • 从单元格到视图控制器的“显示”序列
  • 从单元格到视图控制器的“ShowDetail”序列
  • 基于上的,我希望在运行应用程序时,我的应用程序的视图控制器部分会出现以下行为:

    • 使用“显示”序列,视图控制器场景将显示一个导航控制器栏,在场景的左上角(栏内)包含一个默认的“后退”按钮。让我们从这里开始将其表示为行为(A),并且
    • 使用“ShowDetail”序列,将不显示导航栏。从这里开始,我们将其表示为行为(B),并且
    两种情况都是1。二,。以上分别给出了它们的预期结果,行为(A)和(B)

    现在谈谈我无法解释的部分:

  • 我将segue设置为“Show”,然后在属性检查器中将segue更改为“showtail”。更改后,故事板中的一切看起来都很好(视图控制器中没有导航控制器栏),但在运行应用程序时,我仍然会看到行为(A),即“Show”segue预期的行为
  • 如果我这样做,反之亦然;创建一个“ShowDetail”序列并通过属性检查器()更改为“Show”,我会得到相同的意外(对我来说)行为,即行为(B),即“ShowDetail”序列预期的行为(无导航控制器栏)
  • 我还可以通过记录以下布尔值来跟踪相同的意外行为:

    // In the ViewController code (ViewController.swift)
    let presentingViewIsNavigationController = 
        presentingViewController is UINavigationController
    
    • 情景1。如上所述(使用“Show”segue并且不更改它)会产生预期的
      false
      (此处显示的视图是
      UITableViewController
      ,此视图和
      UIViewController
      都包装在导航控制器中)
    • 情景2。如上所述,正如预期的那样,
      true
      (导航控制器是
      UIViewController
      的显示视图)
    • 情景3。上面的结果出乎意料地是,
      false
    • 情景4。上面的结果出乎意料地是,
      true

    问题:为什么在属性检查器中执行的segue-kind“Show”到/从“showtail”的更改在模拟器中运行应用程序时似乎没有生效


    我正在模拟器中运行Xcode 7.2和iOS 9.2(模拟iPhone 6s plus)。

    我在测试时发现,segue的一个问题是,更改segue种类时,action属性不会更改:

    <segue destination="YYV-02-abX" kind="show" identifier="segueshow" id="X7i-33-rvh"/>
    <segue destination="YYV-02-abX" kind="showDetail" identifier="segueshowdetails" id="crf-TU-94x"/>
    <segue destination="YYV-02-abX" kind="showDetail" identifier="segueshowtoshowdetails" action="showViewController:sender:" id="w2L-45-p7H"/>
    <segue destination="YYV-02-abX" kind="show" identifier="segueshowdetailstoshow" action="showDetailViewController:sender:" id="7Z4-mJ-Pbh"/>
    
    
    

    因此,这可能是苹果方面的一个bug。

    有时我会在情节提要中的此处或此处更改某些内容,而这些更新不会立即生效。我通常将其更改为其他内容并尝试运行,然后将其返回到我想要的值并再次运行,这样可能会起作用。“其他时候我试着清理这个项目。”汉纳德,我明白了。我对“为什么”这样的更新不能立即生效感兴趣。在我的例子中,我试图清理项目,但仍然得到同样的意外(未更新)行为。也许,在上面的特定示例中,除了attributes inspector中的segue类型之外,我还需要做更多的更改。如果是的话,我真的很想知道额外的变化是什么。谢谢你的回答。您是否尝试过执行segue种类更改,然后手动更新代码中的操作?另外,如何访问上面显示的代码nib?(因此我可以自己尝试验证这实际上是这个“bug”的来源)不,我没有做任何进一步的研究,您可以使用首选工具将任何xib或故事板文件作为xml文档进行读取和编辑。例如,移除新的动作标签(在某些匹配中为原始segue类型)将使修改后的segue实际上与使用新类型创建的segue相同。您也可以在那里玩游戏并使用自己的动作集,但如果您这样做,几乎可以肯定最终会有一些东西损坏。谢谢您的快速响应,我明白了,我今天会调查的。然而,正如你所注意到的,只是为了理解这个问题,而不是我更愿意在实践中做的事情,因为我很可能迟早会弄坏一些东西。