为什么每次在IB中打开它都会修改我的XIB?

时间:2011-11-04 00:28:06

标签: iphone ios interface-builder xcode4.2 xib

我通过项目导航器点击XIB。它打开并立即将图标更改为灰色,显示我有未保存的更改。如果我保存更改,请单击其他文件,然后单击返回以重新打开它,进行更多更改。始终在打开时修改。

它发生在这个项目中的一个XIB文件和另一个项目中的一对。我很想知道它为什么会发生以及我现在可以做些什么来解决它并在将来阻止它。

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

编辑:我添加了几个部分,这些部分已从其中一个打开/修改

中的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>

4 个答案:

答案 0 :(得分:22)

我最终将此问题提交给Apple。他们的反应没有启发性,并谈论可能的优化,更新新版Xcode的元数据等。

我通过点击关闭和文件跟踪了100个版本。正如Apple所说,它每次都在“优化”,但每次只是移动一些XML标签。从来没有对它自己的优化感到满意,它会在下次打开时将它们移动。我认为它是Xcode的一个错误,很烦人,但大多数都是无害的。

这只发生在旧的XIB上,并且将内容移动到新的XIB文件中或者(真正发生的事情)Storyboard摆脱了这个问题。

答案 1 :(得分:6)

我不想按照其他答案中的建议使用故事板。 这是一个替代的简单/快速修复。

选择xib视图文件时,请转到检查器上的Interface Builder文档属性。 那你需要

  • 将“部署”更改为与Project SDK不同的内容,在我的情况下,我将其设置为最新的iOS版本(目前是iOS 6)。
  • 将开发更改为与“以前版本”不同的内容,在我的情况下,我将其设置为最新的Xcode版本4.5

我在Lion上运行Xcode 4.5.2。

希望这有帮助。

答案 2 :(得分:4)

基本理念......

XCode存储了许多不同类型的东西的版本号。如果你看一下XIB的XML表示,你会发现绝大多数这些小变化都在这些版本号中。

如何发生......

每当您对Xcode进行更新时,Xcode中的许多不同内容(通常在SDK内)都会得到更新。如果您对XIB文件进行了更改,那么这些版本更改将在XIB中生效。因此,如果您碰巧打开XIB文件,则会将版本更改放入该文件中。一旦您构建或运行应用程序,更改后的内容将保存到文件中。

但我暂时没有更新Xcode!

好吧,无论何时进行上次更新,XIB文件都会随着时间的推移逐个更新时使用新版本号进行更新。

答案 3 :(得分:0)

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

我不知道确切的答案,但我知道这些事情会帮助你找到答案:

XCode 4以搞砸事情而臭名昭着。 如果你把你的目录放到一个版本控制系统(Git)中,然后抓住GitBox并保存你的项目给它一个状态并从中创建一个git repo。 git repo将保存状态。 Gitbox会直观地显示更改。

打开它之后,您将能够在GitBox中右键单击该文件并点击“查看差异”或“查看更改”或其他内容。

您将自动滚动到这些行。如果您可以将XML与Xib相关联,则可以确定哪些更改。

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