カタリナで実行されているXcode 11に問題があります(Moaveにも同じ問題がありました)。あるストーリーボードから別のXcodeにビューまたはViewControllerをコピー/貼り付けようとすると、次の例外でクラッシュします。
...
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Application Specific Information:
Sending paste: to IBStructureAreaDockView from <NSMenuItem: 0x7fe24030ddd0 Paste>
ProductBuildVersion: 11A1027
ASSERTION FAILURE in /Library/Caches/com.Apple.xbs/Sources/IDEInterfaceBuilder/IDEInterfaceBuilder-15400/InterfaceBuilderKit/WidgetIntegration/View/IBViewIntegration.m:2451
Details: There should only be 1 parent of all the constraint items extracted from the pasteboard: {(
)}
Object: <IBUIView: 0x7fe23db1c600>
Method: -ibDidExtractObjects:fromPasteboard:intoDocument:context:
Thread: <NSThread: 0x7fe23ac17e80>{number = 1, name = main}
Hints:
0: Sending paste: to IBStructureAreaDockView from <NSMenuItem: 0x7fe24030ddd0 Paste>
Backtrace:
0 -[IDEAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in IDEKit)
1 _DVTAssertionHandler (in DVTFoundation)
2 _DVTAssertionFailureHandler (in DVTFoundation)
3 -[NSView(IBViewIntegration) ibDidExtractObjects:fromPasteboard:intoDocument:context:] (in IDEInterfaceBuilderKit)
4 -[IBUIView(IBUIViewIntegration) ibDidExtractObjects:fromPasteboard:intoDocument:context:] (in IDEInterfaceBuilderCocoaTouchIntegration)
5 -[IBDocument ibDidExtractObjects:fromPasteboard:context:] (in IDEInterfaceBuilderKit)
6 -[IBDocument insertObjectsFromPasteboard:ofType:asChildrenOfObject:atIndex:context:finishExtractingObjectsBlock:] (in IDEInterfaceBuilderKit)
7 -[IBDocument insertOrMoveChildrenFromPasteboard:ofType:asChildrenOfObject:atIndex:context:finishExtractingObjectsBlock:] (in IDEInterfaceBuilderKit)
8 -[IBDocument addOrMoveChildrenFromPasteboard:ofType:toObject:context:finishExtractingObjectsBlock:] (in IDEInterfaceBuilderKit)
9 -[IBStoryboardDocument addOrMoveChildrenFromPasteboard:ofType:toSceneGroup:context:] (in IDEInterfaceBuilderKit)
10 -[IBSceneDockViewController performDockPasteWithPasteboard:context:] (in IDEInterfaceBuilderKit)
11 -[IBSceneDockViewController dockViewPerformPaste:] (in IDEInterfaceBuilderKit)
12 -[IBStructureAreaDockView paste:] (in IDEInterfaceBuilderKit)
13 -[NSApplication(NSResponder) sendAction:to:from:] (in AppKit)
14 __37-[DVTApplication sendAction:to:from:]_block_invoke.86 (in DVTKit)
15 DVTInvokeWithFailureHint (in DVTFoundation)
16 -[DVTApplication sendAction:to:from:] (in DVTKit)
17 -[NSMenuItem _corePerformAction] (in AppKit)
18 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] (in AppKit)
19 -[NSMenu performKeyEquivalent:] (in AppKit)
20 routeKeyEquivalent (in AppKit)
21 -[NSApplication(NSEvent) sendEvent:] (in AppKit)
22 -[IDEApplication sendEvent:] (in IDEKit)
23 -[NSApplication run] (in AppKit)
24 NSApplicationMain (in AppKit)
25 main (in Xcode)
26 start (in libdyld.dylib)
Performing @selector(paste:) from sender NSMenuItem 0x7fe24030ddd0
abort() called
Application Specific Signatures:
[parentsOfItemsInConstraints count] == 1
...
それは誰かに起こっていますか?これはストーリーボードでサポートされていないものですか?
私にとっての問題は、アプリをバックグラウンドで実行していたためです。エミュレーターを閉じた後、(別のストーリーボードファイルでも)コピー/カットアンドペーストすることができました。
ここで同じ問題。新しいXcode 11のバグだと思います。
迅速な回避策が見つかりました。 Xcodeをクラッシュさせるビューコントローラをコピーして貼り付ける代わりに、cmd + Dを使用してビューコントローラを複製できます。しかし、これは同じストーリーボード内にある場合にのみ役立ちます
Xcode-> Preferences-Locations「Derived Data」の下にある小さな矢印をクリックして、そのフォルダーを削除します。これを実行した後、ストーリーボード間でカットアンドペーストできました。
[View Controller]、[Edit]> [copy]の順に選択します
別のストーリーボードで、編集>貼り付け
簡単なハックを見つけ、プロジェクトナビゲーターに移動し、.storyboardファイルを右クリックして、ソースコードとして開くを選択します。
ストーリーボードをxml形式で取得し、コントローラーのクラスを検索してコピーし、他のストーリーボードにコピーしたのと同じ方法で貼り付けます。ビューコントローラのコード全体を取得してください。
<!--Detail View Controller-->
<scene sceneID="n6l-mp-H1E"> .... </scene>
ストーリーボード全体を貼り付けるときにカーネルに問題があるようですが、これはシミュレータアプリが開いているときにのみ発生します。シミュレーターアプリを閉じて貼り付けてみてください
私はこの問題に何度も直面しています。Xcodeの新しいバージョンが原因のようです。
ここに私のために働く解決策があります。
派生データの削除で、XCodeを再起動します。
Clean&buildプロジェクト。
次のタスクでXCodeがビジー状態にならないようにしてください。
建築プロジェクト
インデックス作成(完了まで待機)
実行中のプロジェクト
ストーリーボードのオープニング
これで、1つのビューコントローラーを1つのストーリーボードから別のストーリーボードにコピーすることができます。
2つの可能なケース:
バックグラウンドで実行されているエミュレータを閉じてからコピーして貼り付けるか、ストーリーボード(XML形式)からコピーして貼り付けることで修正できます。