10

複数の開発者がアプリの 1 つでストーリーボードに取り組んだ後、Xcode Interface Builder でストーリーボードを開こうとすると、次のエラーが発生します。

ドキュメント「MainStoryboard_iPhone.storyboard」を開けませんでした。操作を完了できませんでした。(com.apple.InterfaceBuilder エラー -1)

追加情報については、コンソール ログを確認してください。

全員が最新バージョンの Xcode (4.6.2 4H1003) を実行しており、すべての変更は Interface Builder のストーリーボードに加えられました。コンソール ログに表示される追加情報はありません。エラーは、ログとデバッグのステートメントが表示される同じコンソール ログを参照していると想定していますが、これは完全に空です。

私が取り組んでいた別のアプリでストーリーボードを開こうとすると、開発者の 1 人がこの同じエラーを受け取ります。ただし、このストーリーボードは私のコンピューターの 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 行目の 2 番目の出力のコール スタックに追加の行があります[IDEEditorContext _openNavigableItem:withContentsOfURL:shouldInstallEditorBlock:] (in IDEKit)。そして、11行目(1行目は10行目)は のIDEEditorModeViewController代わりにメソッドを参照していIDEEditorGeniusModeます。それ以外の場合、ログ出力は同じです。

このエラーを最初に受け取ったこの 2 番目のストーリーボードでは、このストーリーボードで作業した唯一の開発者であるため、Git マージの競合の問題はありませんでした。私はこのリポジトリに貢献している唯一の開発者であるため、コミットをこのリポジトリにマージする必要はまったくありませんでした。

4

4 に答える 4

39

Marcelが述べているように、これはマージ時に発生することがあります。しかし、彼の答えは具体的なことを示しているわけではないので、私たちが対処しなければならなかったことのヒントをいくつか挙げさせてください。ローカルで変更されたファイルをマージした後、判読できないストーリーボードがいくつかありました。

ストーリーボードをテキスト モードで開き、ストーリーsegue referenceボード ファイルの末尾をすべてチェックすることで、これらの問題を修正できます。

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

ストーリーボードで引用された値を検索します。この文字列の 2 番目の一致が見つからない場合は、この行を でコメントアウトし<!-- -->ます。無効なセグエ参照をすべて削除した後、Xcode は再びストーリーボードを開くことができました。

于 2015-07-20T07:30:03.633 に答える
2

この問題は、他のストーリーボードの変更をマージすることによって発生しています。ストーリーボード形式は XML ベースです。変更を加えると、これらの変更はプロジェクト ファイルに保存されます。Xcode は、このファイルの構造を保存する方法が非決定論的であるように思われます。物事は異なる方法でソートされる可能性があり、オブジェクトは構造内の異なる場所に表示される可能性があります。これは、自分で作業している場合は問題になりませんが、2 人以上の人がストーリーボードに変更を加えた場合、マージは非常に見苦しくなります。git はファイルを正常にマージできるように見えますが、ファイルの構造が壊れてしまい、ストーリーボードを開くことができなくなります。

ストーリーボードへの変更を早期にコミットしてプッシュします。ストーリーボードに変更を加える前に、必ずプルしてください。マージせず、1 つのバージョンを選択して続行します。

おそらく、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 に答える