如何避免Xcode免费编辑故事板文件?

当我导航到我的一个xib文件时,Xcode将文件标记为已触摸。 撤消和还原没有任何效果。 节省似乎没有任何伤害,但这个小故障导致我频繁的额外的git工作。

有没有其他人看到这个或有一个在我的MainWindow.xib会导致它的东西的想法?

在2016年编辑 – 仍在发生!

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

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

尝试许多不同的解决scheme来解决这个非常恼人的错误后,我发现了一种方法(这当然不是一个“修复”,而是一种解决方法)。

locking控制器,当你完成他们。

在故事板中select视图控制器,打开“标识”检查器,在“文档”部分的底部,将看到“locking”下拉框。 从锁下拉列表中select“所有属性”。

如果你为所有的控制器给你提供了一些问题(或者只是所有的控制器,甚至是所有的控制器),你会注意到当你打开故事板时,Xcode仍然会修改各种元素的框架,但是立即撤消变化。

这导致了开发周期:

  1. 解锁视图控制器
  2. 执行任何必要的更改
  3. locking视图控制器
  4. 承诺

如果更适合您的需求,lockingfunction也适用于逐个视图的情况。

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

我个人觉得知道这是一个已知的bug并不能完全解决这个问题。 这是我到目前为止所了解的,以及如何防止他们出现。

注意:这是为启用AutoLayout的故事板。 我还没有想出手动故事板。

下面是一个button的例子。

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

如果你看一下,你会看到button有一个名为<rect/>的元素,它定义了UI项目的大小和位置。 如果你看下面,你还会看到一个名为<variation/>的元素,它描述了基于大小类别的位置变化。 为了解决这个问题,我们必须使用以下步骤:

  1. 看看在Xcode中显示的警告。 记下该UI元素需要更改的内容。
  2. 在外部(文本)编辑器中打开故事板。
  3. 在故事板中findUI元素。
  4. 更改值以符合警告在<rect/><variation/>
  5. 将文件保存在外部编辑器中。
  6. 回到Xcode。 让它重新计算所有的约束。
  7. 接受再次popup的UI元素的警告。
  8. 如果你回到外部编辑器,你会注意到<variation/>元素已经消失了。

在我的例子中,我不得不将x="97"更新为x="597"

我仍在研究没有<variation/>元素。 我会尽快更新这个答案。