为什么我每次在IB中打开XIB文件时,它都会被修改?

45

我通过项目导航器点击XIB文件。它打开并立即更改图标为灰色,表明有未保存的更改。如果我保存更改,然后单击其他文件并再次单击返回以重新打开它,则会进行更多更改。每次打开都会进行修改。

在这个项目中,一个XIB文件和另一个项目中的几个XIB文件都会出现这种情况。我想知道为什么会发生这种情况,以及如何立即修复它并防止将来出现。

注意:使用Snow Leopard下的Xcode 3.2 Build 4C199

编辑:我已经添加了一些被移除的XML部分,在其中进行了打开/修改操作

        <key>outlets</key>
        <dict>
            <key>addEventTabBarController</key>
            <string>UITabBarController</string>
            <key>window</key>
            <string>UIWindow</string>
        </dict>
        <key>superclass</key>
        <string>NSObject</string>

        <key>outlets</key>
        <dict>
            <key>courseTableCell</key>
            <string>UITableViewCell</string>
        </dict>
        <key>superclass</key>
        <string>UITableViewController</string>

如果你打开它然后离开它,我有一个会被修改的。 - morningstar
4个回答

24

我把这个问题提交给了苹果公司。他们的回复毫无启发性,只是谈论可能的优化,为新版本的Xcode更新元数据等等。

我跟踪了从打开和关闭文件到保存100次的版本。正如苹果所说的,“每次都在优化”,但每次它只是移动一些XML标签。它从来不满足于自己的优化,下一次打开时就会重新排列它们。我认为这是Xcode的一个bug,令人烦恼但大多无害。

这种情况只会出现在旧的XIB文件中,将其内容移入新的XIB文件或(真正发生的情况)使用Storyboards可以解决这个问题。


1
我认为,如果他们想要优化这些东西,他们应该采取与优化构建配置相同的方法,并在进行此类更改之前至少询问用户... - David Hunt
即使在Xcode 6和7中也会出现这种情况...我认为这永远不会被苹果公司修复!真丢人! - Anoop Vaidya

6

我不想像其他答案建议的那样使用storyboards。这里是一个备选的简单/快速解决方案。

当选择xib视图文件时,在检查器上转到界面构建器文档属性。

  • 然后,您需要更改"部署"为与项目SDK不同的内容。在我的情况下,我将其设置为最新的iOS版本(目前为iOS 6)。
  • 更改开发版本为与“上一个版本”不同的版本。在我的情况下,我将其设置为最新的Xcode版本4.5。

我在Lion上运行Xcode 4.5.2。

希望这可以帮助到您。


1
这太棒了,帮了我大忙! - Dustin Kendall

4

基本思路...

XCode存储了许多版本号,涉及各种不同的内容。如果查看XIB的XML表示形式,应该会发现其中绝大部分的小更改都在这些版本号中。

是如何发生的...

每当你更新Xcode时,Xcode内的许多不同的东西(通常包括SDK内部)会得到更新。如果你对XIB文件进行更改,那么这些版本更改就会被放置在XIB中。因此,如果你打开一个XIB文件,版本更改就会被放入该文件中。当你构建或运行应用程序时,这些更改就会被保存到文件中。

但我已经很久没有更新Xcode了!

好吧,无论你上次更新是什么时候,XIB文件都会随着时间逐个被更新为新的版本号。


5
虽然我毫不怀疑 XCode 可以在版本之间重新构建和修改文件,但这并不是这里发生的事情。如果我只是一直打开文件并保存更改,我可以在 5 分钟内打开/修改并保存 50 次更改。我还看了一下修改内容,它们似乎都围绕着 outlet 和其他部分展开,这可能会导致文件出现问题......但它仍然能正常工作,这表明我对 XIB 文件内部的 XML 工作原理知之甚少。 - DBD

0

编辑 XCode 4现在更好了(也许),如果你想要投反对票,请问自己,“我是否使用版本控制从XCode 3迁移到XCode 4?” 如果没有,那么你不知道自己在做什么,请不要投票。如果你已经这样做了,你就知道你有多痛苦,但是除此之外,这个问题已经死了。如果你发现自己打开了一个旧项目,只需重新创建它并复制文件即可。

我不知道确切的答案,但我知道以下几点会帮助你找到答案:

XCode 4以出错而臭名昭著。 如果你将目录放入版本控制系统(Git)中,则可以使用GitBox保存项目以便创建git存储库并保存状态。Git存储库将保存状态。Gitbox将直观地显示更改。

打开后,您将能够右键单击GitBox中的该文件,然后点击“查看差异”或“查看更改”等选项。

您将被自动滚动到行。如果您能将XML与Xib相关联,您就可以找出更改内容。

我从Lion升级到Snow Leopard,所以我不再处理这个问题了。


我正在使用版本控制,并查看了更改记录。有时候,我发誓只是在文件中移动 XML。其他时候,它会进行实际更改,看起来似乎会影响我的各个组件...但当我运行代码时却没有任何明显的影响。如果它只是在4种不同的“更改”之间切换,我也不会感到惊讶。 - DBD
你说从Lion回到SL可以解决这个异常?是Xcode版本造成了差异还是操作系统?可能是Lion的版本控制起作用了吗? - Chris Wagner
我从未切换到 Lion,一直在使用 Snow Leopard,显然我有这个问题。 :) - DBD

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