如何避免对情节提要文件进行Xcode无偿编辑?

如何避免对情节提要文件进行Xcode无偿编辑?,xcode,xib,Xcode,Xib,当我导航到某个xib文件时,Xcode会将该文件标记为已触摸。撤消和恢复无效。储蓄似乎没有什么坏处,但这个小故障让我经常做额外的git工作 是否有其他人在我的MainWindow.xib中看到了这一点或对可能导致这一点的内容有想法 2019年编辑-仍在发生 苹果表示这是一个已知的问题: 这是错误ID 9847336的后续操作。经过进一步调查,已确定这是一个已知问题,工程部目前正在对其进行调查。此问题已在我们的错误数据库中以原始错误ID 9056156存档。用于跟踪此重复问题的原始错误号可以在状态

当我导航到某个xib文件时,Xcode会将该文件标记为已触摸。撤消和恢复无效。储蓄似乎没有什么坏处,但这个小故障让我经常做额外的git工作

是否有其他人在我的MainWindow.xib中看到了这一点或对可能导致这一点的内容有想法


2019年编辑-仍在发生

苹果表示这是一个已知的问题:

这是错误ID 9847336的后续操作。经过进一步调查,已确定这是一个已知问题,工程部目前正在对其进行调查。此问题已在我们的错误数据库中以原始错误ID 9056156存档。用于跟踪此重复问题的原始错误号可以在状态列中找到,格式为:duplicate/OrigBug


在尝试了许多不同的解决方案来绕过这个非常恼人的bug之后,我发现有一种方法是有效的,它当然不是修复方法,而是一种解决方法

使用完控制器后锁定它们

在故事板中选择一个视图控制器,打开Identity inspector,在文档部分的底部,您将看到一个锁定下拉列表。从“锁定”下拉列表中选择所有属性

如果对出现问题的所有控制器或只是一般的所有控制器执行此操作,甚至在打开情节提要时,您会注意到,Xcode仍会修改各种元素的帧,但随后会立即撤消更改

这将导致开发周期为:

解锁视图控制器 执行任何必要的更改 锁定视图控制器 犯罪 如果一个视图一个视图的情况更适合您的需要,那么锁定也可以工作


这个bug已经存在了很长一段时间,而且似乎不会很快得到修复,所以不幸的是,现在这已经足够了。

我个人认为,知道它是一个已知的bug并不能完全解决问题。以下是我到目前为止所发现的,以及如何防止它们出现

注意:这适用于启用自动布局的情节提要。对于手动故事板,我还没有弄明白

下面是一个按钮示例

<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ebd-ny-Ill">
    <rect key="frame" x="97" y="5" width="135" height="30"/>
    <color key="backgroundColor" white="0.94557291669999999" alpha="1" colorSpace="calibratedWhite"/>
    <constraints>
        <constraint firstAttribute="width" constant="86" id="bXV-mS-ksp">
            <variation key="heightClass=regular" constant="135"/>
        </constraint>
    </constraints>
    <fontDescription key="fontDescription" type="system" pointSize="13"/>
    <state key="normal" title="See Full Menu">
        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
    </state>
    <variation key="default">
        <mask key="constraints">
            <exclude reference="bXV-mS-ksp"/>
        </mask>
    </variation>
    <variation key="heightClass=regular" misplaced="YES">
        <rect key="frame" x="97" y="5" width="135" height="28"/>
        <mask key="constraints">
            <include reference="bXV-mS-ksp"/>
        </mask>
    </variation>
    <connections>
        <action selector="showMenu:" destination="eQk-yf-uDh" eventType="touchUpInside" id="xOP-Se-FXQ"/>
    </connections>
</button>
如果您查看一下,您将看到按钮有一个名为This的元素,它定义了UI项的大小和位置。如果您在下面查看,还将看到一个名为的元素,它描述了基于大小类的位置变化。为了确定该位置,我们必须使用以下步骤:

看看Xcode中显示的警告。注意该UI元素需要更改的内容。 在外部文本编辑器中打开情节提要。 在故事板中查找UI元素。 更改该值以匹配和中的警告提示。 将文件保存在外部编辑器中。 回到Xcode。让它重新计算所有约束。 接受再次弹出的UI元素的警告。 如果返回到外部编辑器,您将注意到元素已消失。 在我的示例中,我必须将x=97更新为x=597


我仍然在研究那些没有答案的元素。我会在找到答案后立即更新它。

我在我的环境中看不到这种行为。我想知道:有问题的xib是不是最后一次在Xcode3中使用,而Xcode4正在幕后进行一些转换?或者,无论是否是第一次在Xcode4中选择xib文件,您在任何时候都会看到这种情况吗?是否存在文件为只读且Xcode可能正在更改权限以便您可以编辑它的git设置?这可能是修改状态的原因。谢谢你的建议。该文件位于xcode 3项目中。每次我导航到该文件时都会出现问题。您的转换想法很好,但即使在保存/构建之后,问题仍然存在。没有特殊的git设置。下面是我可以重现这个问题的最简单的步骤:xcode->New File…->User Interface->Application xib。在中拖动选项卡栏控制器。拯救选择项目中的任何其他文件。新的xib被xcode触及。将原始文件与xcode的mods进行比较,会显示一组如下所示的标记:以及一个非常大的块,其打开方式如下:。我疯了吗?哇。按照你的步骤,我看到了同样的行为。我想知道它是否特定于作为应用程序XIB的XIB文件?您可以想象,xib对您的应用程序代理等方面有专门的知识。这确实是一种奇怪的行为,这是肯定的。谢谢你的检查。我可以用任何xib复制。关键似乎是有一个超宽带控制器。我报告了苹果的一个bug。。。bug 9847336。我看不出苹果自己的开发人员会不会恼火到现在他们已经修复了它。我仍然可以在2013年10月的XCode 4.6.3中100%看到它!。。。和6.2,带.xibs.:这让我烦了很久了!直到今天我才决定用谷歌搜索它。该死的那只虫子一定很难对付。xcode
6.4…仍然在Xcode 8.2中,带有XIB和故事板。2017年3月。哦,老兄,我很兴奋能找到这个解决办法。这个错误已经困扰我四个月了。唉,如果我锁定视图控制器上的所有属性,Xcode 6.2就会崩溃。我甚至尝试将锁向下移动到根视图,但每次都会崩溃。该死。很高兴你能让它工作!Xcode只是随机编辑ID和其他内容,而不仅仅是查看约束和位置。