如何避免Xcode对故事板文件的无偿编辑?

时间:2011-05-05 15:22:49

标签: xcode xib

当我导航到我的一个xib文件时,Xcode会将文件标记为已触摸。撤消和还原无效。保存似乎没有坏处,但是故障导致我经常额外的git工作。

有没有其他人看过这个或者对我的MainWindow.xib中的某些内容有所了解会导致它?

2016年编辑 - 仍在发生!

3 个答案:

答案 0 :(得分:27)

Apple称这是一个众所周知的问题:

  

这是对Bug ID#9847336的跟进。经过进一步调查后,已确定这是一个已知问题,目前正在通过工程进行调查。此问题已在我们的错误数据库中以原始错误ID#9056156提交。用于跟踪此重复问题的原始错误号可在State列中找到,格式为:Duplicate / OrigBug#。

答案 1 :(得分:13)

在尝试了许多不同的解决方案来解决这个非常烦人的错误之后,我发现了一种有效的方法(它肯定不是“修复”,而是一种解决方法)。

完成控制后锁定控制器。

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

如果你为所有给你问题的控制器(或者通常只是所有控制器)执行此操作,你会注意到当你打开故事板时,Xcode仍然会修改各种元素的帧,但是立即撤消更改。

这导致开发周期为:

  1. 解锁视图控制器
  2. 执行任何必要的更改
  3. 锁定视图控制器
  4. 提交
  5. 如果能够更好地满足您的需求,锁定也适用于逐个视图的情况。

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

答案 2 :(得分:3)

我个人觉得知道它是一个已知的错误并不能解决问题。这是我到目前为止所知道的以及如何防止它们出现。

注意:这是针对启用了AutoLayout的故事板。我还没有想到手动故事板。

以下是按钮的示例。

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

如果您看一下,您会看到该按钮有一个名为<rect/>的元素。这定义了UI项目的大小和位置。如果你看下面的话,你还会看到一个名为<variation/>的元素,它根据大小等级描述位置的变化。为了确定这个位置,我们必须使用以下步骤:

  1. 查看Xcode中显示的警告。请注意该UI元素需要更改的内容。
  2. 在外部(文本)编辑器中打开故事板。
  3. 在故事板中查找UI元素。
  4. 更改值以匹配<rect/><variation/>中警告的建议。
  5. 将文件保存在外部编辑器中。
  6. 回到Xcode。让它重新计算所有约束条件。
  7. 接受再次弹出的UI元素的警告。
  8. 如果您返回外部编辑器,您会注意到<variation/>元素已消失。
  9. 在我的示例中,我必须将x="97"更新为x="597"

    我还在处理没有<variation/>的元素。我一想出来就会立即更新这个答案。