为什么git会一遍又一遍地添加和删除Storyboard<classes>部分?

19

当保存Storyboard并将更改提交到Git时,很有可能整个<classes>部分会被从源代码控制(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>

为什么会这样,更重要的是:我该如何阻止这种情况?


每次提交时,它是真的被添加和删除了,还是只是移动了位置(即在每个提交中都出现了添加和删除)?因为后者似乎更有可能。 - Jan Hudec
提交的代码是在同一台电脑上完成的吗?如果不是,那么它们是由完全相同版本的Storyboard完成的吗? - Jan Hudec
有关此事还有其他进展吗?我正在尝试提交代码,但是 iPad.storyboard 文件中的 <classes> 部分被删除了,而 iPhone.storyboard 文件没有被删除。即使在 iPad 上缺少 <classes> 部分,在 iPhone 上仍然存在时,应用程序也可以正常运行。值得一提的是,我的提交是通过 SourceTree 进行的,而不是通过内部 Xcode 或命令行进行的。 - john.k.doe
1
@john.k.doe 我们发现这并不重要。所以当我们提交或合并时,我们尽量保持前一个提交的状态,以保持噪音低。 - ericteubert
此前也曾被问及:在Storyboard文件中,类元素会翻转出现和消失。 - Chris W. Rea
显示剩余2条评论
2个回答

10

(本答案基于个人经验,不是正式答案)

.storyboard xml文件中的classes部分列出了您在项目中拥有的所有视图控制器,以便:

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

我猜这个部分是一个缓存,在两个上述用途都没有使用一段时间后会被删除。

事实上,这个部分出现的事实表明它可以安全地忽略,因为它是根据需要自动生成的。如果您已经提交了它,并且随后在差异中出现了它被删除的情况,请打开Identity Inspector,下拉可用Custom Class下的类列表,然后整个部分就会再次出现。


1
这是一个非常好的解释。但是,还有没有办法避免这种情况?有没有办法告诉Xcode永久保留Storyboard上的那个部分,而不是在Xcode感觉需要时将其删除,然后在打开Storyboard时再添加回来?这会影响提交并且很麻烦。 - Ricardo Sanchez-Saez

1
根据我的经验,只有在打开storyboard并出现与类存在相关的错误时才会发生删除。例如,在合并冲突尚未解决时打开storyboard,可能会导致一个或多个类无法解析。在这种情况下,界面构建器似乎会删除整个部分,而不仅仅是有问题的类。
对我来说,如果看到被删除的部分,只需在补丁准备好后再次打开storyboard即可轻松解决。如果所有问题都已解决,则该部分将重新生成。如果没有重新生成,则意味着我有项目设置问题,无论如何都不应该提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接