10

在几个开发人员在我们的一个应用程序中处理情节提要之后,我们现在尝试在 Xcode Interface Builder 中打开情节提要时遇到此错误:

无法打开文档“MainStoryboard_iPhone.storyboard”。操作无法完成。(com.apple.InterfaceBuilder 错误 -1。)

检查控制台日志以获取更多信息。

我们都在运行最新版本的 Xcode (4.6.2 4H1003),所有更改都对 Interface Builder 中的故事板进行。控制台日志中没有显示其他信息。我假设错误是指出现日志和调试语句的同一个控制台日志,它完全是空的。

当尝试在我正在开发的另一个应用程序中打开故事板时,其中一位开发人员收到了同样的错误。然而,这个故事板在我的计算机上的 Xcode 中对我来说打开得很好,所以我们当时从来没有费心去研究这个错误(这首先发生在几个月前)。但是这一次,我们都得到了同样的错误(我们中的 4 个人已经测试过在我们自己的电脑上打开它)。

我们使用 GitHub 来管理两个项目的源代码控制,使用几个不同的 Git 客户端。关于导致此错误的原因以及如何修复它的任何想法?

更新:这是尝试打开情节提要后我计算机上 /var/logs/system.log 的输出:

Jun  5 16:38:44 my-computer-host-name Xcode[271]: Exception raised while unarchiving document objects - *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
Jun  5 16:38:45 my-computer-host-name Xcode[271]: [MT] DVTAssertions: Warning in /SourceCache/IDEKit/IDEKit-2113/Framework/Classes/Editor/IDEEditorDocument.m:1364
    Details:  Message sent to invalidated IBStoryboardDocument instance <IBStoryboardDocument: 0x40ecc34c0>. Backtrace for invalidation:
       0  0x000000010d814f86 -[IDEEditorDocument _invalidate] (in IDEKit)
      1  0x000000010d883291 -[IDEEditorDocument initForURL:withContentsOfURL:ofType:error:] (in IDEKit)
      2  0x00000001103005d0 -[IBDocument initForURL:withContentsOfURL:ofType:error:] (in IDEInterfaceBuilderKit)
      3  0x000000010d882efd +[IDEDocumentController _newEditorDocumentWithClass:forURL:withContentsOfURL:ofType:extension:error:] (in IDEKit)
      4  0x000000010d882dba -[IDEEditorContext _newEditorDocumentWithClass:forURL:withContentsOfURL:ofType:extension:error:] (in IDEKit)
      5  0x000000010d88290c -[IDEEditorContext _openNavigableItem:withContentsOfURL:documentExtension:shouldInstallEditorBlock:] (in IDEKit)
      6  0x000000010d991628 -[IDEEditorContext _notifyDelegateAndOpenNavigableItem:withContentsURL:documentExtensionIdentifier:locationToSelect:annotationRepresentedObject:stateDictionary:annotationWantsIndicatorAnimation:exploreAnnotationRepresentedObject:highlightSelection:] (in IDEKit)
      7  0x000000010d8bfe7b -[IDEEditorContext _notifyDelegateAndOpenEditorOpenSpecifier:updateHistory:] (in IDEKit)
      8  0x000000010d8bf99c -[IDEEditorContext _openEditorOpenSpecifier:updateHistory:] (in IDEKit)
      9  0x000000010d8bf8ba -[IDEEditorContext openEditorOpenSpecifier:] (in IDEKit)
     10  0x000000010d8cbf40 -[IDEEditorGeniusMode openEditorOpenSpecifier:editorContext:] (in IDEKit)
     11  0x000000010d8bf76e -[IDEEditorArea _openEditorOpenSpecifier:editorContext:takeFocus:] (in IDEKit)
     12  0x000000010d9a3174 __108+[IDEEditorCoordinator _doOpenEditorOpenSpecifier:forWorkspaceTabController:editorContext:target:takeFocus:]_block_invoke (in IDEKit)
     13  0x000000010d8bf6cc +[IDEEditorCoordinator _doOpenWithWorkspaceTabController:editorContext:target:allowFallback:documentURL:usingBlock:] (in IDEKit)
     14  0x000000010d8bf12d +[IDEEditorCoordinator _doOpenEditorOpenSpecifier:forWorkspaceTabController:editorContext:target:takeFocus:] (in IDEKit)
     15  0x000000010d8bed45 -[_IDEOpenRequest _runIfNecessary] (in IDEKit)
     16  0x00007fff8bfde395 __NSFireDelayedPerform (in Foundation)
     17  0x00007fff8b169804 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (in CoreFoundation)
     18  0x00007fff8b16931d __CFRunLoopDoTimer (in CoreFoundation)
     19  0x00007fff8b14ead9 __CFRunLoopRun (in CoreFoundation)
     20  0x00007fff8b14e0e2 CFRunLoopRunSpecific (in CoreFoundation)
     21  0x00007fff8ac57eb4 RunCurrentEventLoopInMode (in HIToolbox)
     22  0x00007fff8ac57c52 ReceiveNextEventCommon (in HIToolbox)
     23  0x00007fff8ac57ae3 BlockUntilNextEventMatchingListInMode (in HIToolbox)
     24  0x00007fff85f5d563 _DPSNextEvent (in AppKit)
     25  0x00007fff85f5ce22 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in AppKit)
     26  0x00007fff85f541d3 -[NSApplication run] (in AppKit)
     27  0x00007fff85ef8c06 NSApplicationMain (in AppKit)
     28  0x000000010cbc9b6f (in Xcode)
     29  0x000000010cbc9b00 (in Xcode)
     30  0x0000000000000002

    Object:   <IBStoryboardDocument: 0x40ecc34c0>
    Method:   -updateChangeCount:
    Thread:   <NSThread: 0x40030a220>{name = (null), num = 1}
    Please file a bug at http://bugreport.apple.com with this warning message and any useful information you can provide.

这是在尝试打开另一个项目中的故事板后,另一个开发人员的计算机上的日志输出,我们得到了同样的错误(这是在我的计算机上可以正常打开的故事板):

Jun  5 17:20:13 other-dev-computer-host-name Xcode[157]: Exception raised while unarchiving document objects - *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
Jun  5 17:20:13 other-dev-computer-host-name Xcode[157]: [MT] DVTAssertions: Warning in /SourceCache/IDEKit/IDEKit-2113/Framework/Classes/Editor/IDEEditorDocument.m:1364
    Details:  Message sent to invalidated IBStoryboardDocument instance <IBStoryboardDocument: 0x409ec3340>. Backtrace for invalidation:
       0  0x000000010d746f86 -[IDEEditorDocument _invalidate] (in IDEKit)
      1  0x000000010d7b5291 -[IDEEditorDocument initForURL:withContentsOfURL:ofType:error:] (in IDEKit)
      2  0x00000001102755d0 -[IBDocument initForURL:withContentsOfURL:ofType:error:] (in IDEInterfaceBuilderKit)
      3  0x000000010d7b4efd +[IDEDocumentController _newEditorDocumentWithClass:forURL:withContentsOfURL:ofType:extension:error:] (in IDEKit)
      4  0x000000010d7b4dba -[IDEEditorContext _newEditorDocumentWithClass:forURL:withContentsOfURL:ofType:extension:error:] (in IDEKit)
      5  0x000000010d7b490c -[IDEEditorContext _openNavigableItem:withContentsOfURL:documentExtension:shouldInstallEditorBlock:] (in IDEKit)
      6  0x000000010d7d9c96 -[IDEEditorContext _openNavigableItem:withContentsOfURL:shouldInstallEditorBlock:] (in IDEKit)
      7  0x000000010d8c3667 -[IDEEditorContext _notifyDelegateAndOpenNavigableItem:withContentsURL:documentExtensionIdentifier:locationToSelect:annotationRepresentedObject:stateDictionary:annotationWantsIndicatorAnimation:exploreAnnotationRepresentedObject:highlightSelection:] (in IDEKit)
      8  0x000000010d7f1e7b -[IDEEditorContext _notifyDelegateAndOpenEditorOpenSpecifier:updateHistory:] (in IDEKit)
      9  0x000000010d7f199c -[IDEEditorContext _openEditorOpenSpecifier:updateHistory:] (in IDEKit)
     10  0x000000010d7f18ba -[IDEEditorContext openEditorOpenSpecifier:] (in IDEKit)
     11  0x000000010d7f189f -[IDEEditorModeViewController openEditorOpenSpecifier:editorContext:] (in IDEKit)
     12  0x000000010d7f176e -[IDEEditorArea _openEditorOpenSpecifier:editorContext:takeFocus:] (in IDEKit)
     13  0x000000010d8d5174 __108+[IDEEditorCoordinator _doOpenEditorOpenSpecifier:forWorkspaceTabController:editorContext:target:takeFocus:]_block_invoke (in IDEKit)
     14  0x000000010d7f16cc +[IDEEditorCoordinator _doOpenWithWorkspaceTabController:editorContext:target:allowFallback:documentURL:usingBlock:] (in IDEKit)
     15  0x000000010d7f112d +[IDEEditorCoordinator _doOpenEditorOpenSpecifier:forWorkspaceTabController:editorContext:target:takeFocus:] (in IDEKit)
     16  0x000000010d7f0d45 -[_IDEOpenRequest _runIfNecessary] (in IDEKit)
     17  0x00007fff98955395 __NSFireDelayedPerform (in Foundation)
     18  0x00007fff909bd804 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (in CoreFoundation)
     19  0x00007fff909bd31d __CFRunLoopDoTimer (in CoreFoundation)
     20  0x00007fff909a2ad9 __CFRunLoopRun (in CoreFoundation)
     21  0x00007fff909a20e2 CFRunLoopRunSpecific (in CoreFoundation)
     22  0x00007fff92e5eeb4 RunCurrentEventLoopInMode (in HIToolbox)
     23  0x00007fff92e5ec52 ReceiveNextEventCommon (in HIToolbox)
     24  0x00007fff92e5eae3 BlockUntilNextEventMatchingListInMode (in HIToolbox)
     25  0x00007fff96036563 _DPSNextEvent (in AppKit)
     26  0x00007fff96035e22 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in AppKit)
     27  0x00007fff9602d1d3 -[NSApplication run] (in AppKit)
     28  0x00007fff95fd1c06 NSApplicationMain (in AppKit)
     29  0x000000010caf9b6f (in Xcode)
     30  0x000000010caf9b00 (in Xcode)
     31  0x0000000000000002

Object:   <IBStoryboardDocument: 0x409ec3340>
Method:   -updateChangeCount:
Thread:   <NSThread: 0x40030a1a0>{name = (null), num = 1}
Please file a bug at http://bugreport.apple.com with this warning message and any useful information you can provide.

两个日志输出非常相似。在第 6 行的第二个输出的调用堆栈中还有一行:[IDEEditorContext _openNavigableItem:withContentsOfURL:shouldInstallEditorBlock:] (in IDEKit)。第 11 行(第 10 行)引用了方法IDEEditorModeViewController而不是IDEEditorGeniusMode. 否则日志输出是相同的。

请注意,我们最初收到此错误的第二个故事板不会有 Git 合并冲突的问题,因为我是唯一一个在此故事板上工作的开发人员。我根本不需要将提交合并到这个存储库,因为我是它的唯一贡献者。

4

4 回答 4

39

As Marcel states: this sometimes occurs on a merge. But his answer does not point to anything specific, so let me give a hint what we had to deal with a few times. We had some unreadable storyboards after a merge on a file that was changed locally.

We could fix them by opening the storyboard in text-mode and checking every segue reference in the end of the storyboard file:

<inferredMetricsTieBreakers>
    <segue reference="gJw-Ph-JeV"/>
    <segue reference="Olp-GN-hLL"/>
    <segue reference="aFq-vB-ngK"/>
</inferredMetricsTieBreakers>

Search the storyboard for the quoted values. If you cannot find a second match for this string, comment out this line with <!-- -->. After removing all invalid segue references, Xcode was able to open the storyboards again.

于 2015-07-20T07:30:03.633 回答
6

项目是否使用任何自定义字体?

我一整天都在处理完全相同的问题(尝试了多台具有多个 XCode 版本的计算机),并且在我安装了我们在项目中拥有的两种自定义字体之后,Storyboards 就可以打开了。

我收到了“无效”异常和数组异常的混合。数组异常导致一位开发人员遇到类似的 StackOverflow 问题,他意识到我们有自定义字体。

于 2013-08-16T22:00:41.923 回答
2

此问题是由合并彼此的故事板更改引起的。故事板格式是基于 XML 的。当您进行更改时,这些更改将保存在项目文件中。Xcode 在保存这个文件结构的方式上似乎是不确定的,事物可以不同的排序,对象可以出现在结构中的不同位置。当您自己工作时这并不重要,但是当两个或更多人对故事板进行更改时,合并会变得非常难看。尽管 git 似乎能够很好地合并文件,但文件的结构会损坏,您将无法打开情节提要。

尽早将您的更改提交到情节提要并推动。在对情节提要进行更改之前始终拉动。不要合并,选择一个版本并继续。

您最好将 xcode 项目文件视为 git 存储库中的二进制文件。请参阅http://robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap以获得关于此的良好阅读。

至于您的情况,您可能必须检查项目文件的已知良好版本并从那里重建情节提要中的更改。

于 2013-06-05T13:38:01.423 回答
-1

这对我有用:

在有错误的环境中删除 .storyboard 文件(移动到垃圾箱)。

从有效的环境中复制 .storyboard 并将其(单独的文件)发送到无效的环境(电子邮件、拇指驱动器、Skype)。

将 .storyboard 拖放回损坏的环境中(复制并保存)

固定的。

于 2015-01-26T17:38:08.587 回答