为什么git反复添加和删除Storyboard <classes>部分?

当保存故事板并将修改提交到git时,整个<classes>部分将被移除或添加到源代码pipe理(git)中的机会是很好的。 我在命令行上使用git,而不是XCode集成的UI。

首先看起来像这样:

 + <classes> + <class className="CPTGraphHostingView" superclassName="UIView"> + <source key="sourceIdentifier" type="project" relativePath="./Classes/CPTGraphHostingView.h"/> + </class> ... + </classes> 

在下一个提交中看起来像这样:

 - <classes> - <class className="CPTGraphHostingView" superclassName="UIView"> - <source key="sourceIdentifier" type="project" relativePath="./Classes/CPTGraphHostingView.h"/> - </class> ... - </classes> 

为什么呢,更重要的是,我怎么能阻止呢?

(这个答案是基于个人的经验,而不是一个正式的)

.storyboard xml文件中的classes部分列出了项目中所有的视图控制器

  1. 在Interface Builder中selectUI元素时,允许Assistant Editor显示正确的源文件
  2. 允许Identity Inspector(右侧面板)显示自定义类的选项。

我想这个部分是一个caching,当上面列出的两个用途都没有被使用一段时间后退出。

事实上,这一部分首先出现意味着可以忽略,因为它是根据需要自动生成的。 如果您已经提交,并且随后显示为在diff上删除,请打开Identity Inspector,从Custom Class下拉列表中可用的类,然后再次查看整个部分是如何存在的。

根据我的经验,只有在打开故事板并且存在类存在相关错误的情况下,移除才会发生。 一个例子是打开故事板,而合并冲突尚未解决。 一个或多个类可能无法parsing。 在这种情况下,接口生成器似乎是删除整个部分,而不仅仅是违规的类。

对于我来说,修补程序准备就绪后,可以通过再次打开故事板来方便地进行修复,以防出现问题。 如果所有问题都解决了,则该部分将被重新生成。 如果不是这样,这意味着我有一个项目设置的问题,我不应该提交反正。