在几个开发人员在我们的某个应用程序中处理故事板后,我们现在在尝试在Xcode Interface Builder中打开故事板时收到此错误:
无法打开文档“MainStoryboard_iPhone.storyboard”。 该操作无法完成。 (com.apple.InterfaceBuilder错误 -1。)
检查控制台日志以获取更多信息。
我们都在运行最新版本的Xcode(4.6.2 4H1003),所有更改都在Interface Builder的故事板中进行。控制台日志中没有显示其他信息。我假设错误是指同一个控制台日志,其中显示日志和调试语句,这是完全空的。
当我尝试在我正在处理的另一个应用程序中打开故事板时,其中一个开发人员收到同样的错误。这个故事板在我的计算机上为Xcode打开了,但是,我们从不打扰在当时更多地查看错误(这是几个月前的第一次)。但是这一次,我们都得到了同样的错误(我们中的4个人已经测试过在我们自己的计算机上打开它。)
我们正在使用GitHub来管理两个项目的源代码控制,使用一些不同的Git客户端。有关导致此错误的原因以及如何解决此问题的任何想法?
UPDATE:尝试打开故事板后,这是我计算机上/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行(第1行10)引用方法IDEEditorModeViewController
而不是IDEEditorGeniusMode
。否则日志输出是相同的。
请注意,我们最初收到此错误的第二个故事板不会出现Git合并冲突的问题,因为我是唯一一个处理此故事板的开发人员。我从来不需要将提交合并到这个存储库,因为我是它的唯一贡献者。
答案 0 :(得分:29)
如Marcel所述:这有时会发生在合并上。但他的回答并没有指出具体的内容,所以让我提一下我们必须处理几次的事情。合并后,我们在本地更改的文件后有一些不可读的故事板。
我们可以通过在文本模式下打开故事板并检查故事板文件末尾的每个segue reference
来修复它们:
<inferredMetricsTieBreakers>
<segue reference="gJw-Ph-JeV"/>
<segue reference="Olp-GN-hLL"/>
<segue reference="aFq-vB-ngK"/>
</inferredMetricsTieBreakers>
在故事板中搜索引用的值。如果您找不到此字符串的第二个匹配项,请使用<!-- -->
注释掉该行。删除所有无效的segue引用后,Xcode能够再次打开故事板。
答案 1 :(得分:5)
项目是否使用任何自定义字体?
我只是花了一整天时间来处理完全相同的问题(尝试了多个具有多个XCode版本的计算机),并且在我安装了项目中我们能够打开的两个自定义字体之后立即进行了处理。
我收到了“invalidate”异常以及数组异常的混合。数组异常导致一位开发人员进入similar StackOverflow question,他意识到我们有自定义字体。
答案 2 :(得分:2)
此问题是由合并彼此故事板更改引起的。故事板格式是基于XML的。进行更改时,这些更改将保存在项目文件中。 Xcode在保存此文件结构的方式上似乎是不确定的,事物可以按不同方式排序,对象可以出现在结构中的不同位置。当你自己工作时这并不重要,但是当两个或更多人对故事板进行更改时,合并会变得非常难看。即使git似乎能够合并文件,文件的结构也会被破坏,你将无法打开你的故事板。
尽早将您的更改提交到故事板并推送。在更改故事板之前,总是拉出来。不要合并,选择一个版本并继续。
您可能最好将xcode项目文件视为git存储库中的二进制文件。有关此问题的详细信息,请参阅http://robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap。
至于您的情况,您可能需要查看项目文件的知识版本,并从那里重新构建故事板中的更改。
答案 3 :(得分:-1)
这对我有用:
在错误删除.storyboard文件的环境中(移至垃圾箱)。
从工作环境中复制.storyboard并将其发送(独奏文件)到不起作用的环境(电子邮件,拇指驱动器,Skype)。
将.storyboard拖放回破碎的环境(复制并保存)
固定。