Xcode 11 аварийно завершает работу при копировании/вставке представлений из разных раскадровок

У меня проблема с Xcode 11, работающим на Catalina (такая же проблема была с Moave). Когда я пытаюсь скопировать/вставить представление или ViewController из одной раскадровки в другую, Xcode вылетает с этим исключением:

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

Это происходит с кем-то еще? Это что-то не поддерживается раскадровкой?


person LorenzOliveto    schedule 09.10.2019    source источник
comment
Это определенно ошибка Xcode, поэтому лучшее, что вы можете сделать, это сообщить об этом в Apple's Feedback Assistant   -  person Alladinian    schedule 09.10.2019
comment
То же самое здесь, я могу подтвердить, что копирование/вставка viewController из одной раскадровки в другую вызывает сбой Xcode 11 (Mojave).   -  person Szilveszter Zsigmond    schedule 17.10.2019
comment
То же самое здесь, Xcode продолжает падать при копировании и вставке. cmd + D работает, если вы хотите дублировать один viewController в одной и той же раскадровке, но мне нужно скопировать и вставить в другую раскадровку.   -  person fs_tigre    schedule 30.10.2019
comment
ОБНОВЛЕНИЕ. Теперь он просто начал работать нормально после удаления других версий Xcode, которые я установил. Возможно, проблема была вызвана другими версиями, я не знаю, но это единственное, что я сделал после проблем, теперь я могу копировать и вставлять контроллеры представления между разными раскадровками без сбоя Xcode 11.   -  person fs_tigre    schedule 01.11.2019


Ответы (12)


Проблема для меня заключалась в том, что у меня было приложение, работающее в фоновом режиме. После закрытия эмулятора я смог копировать/вырезать и вставлять (даже в разные файлы раскадровки).

person Mateus Cerqueira    schedule 01.12.2019
comment
ЗАКРЫТИЕ СИМУЛЯТОРА ЭТО РЕШЕНИЕ! БЛАГОДАРНОСТЬ - person Dhaval H. Nena; 18.11.2020

Xcode- > Preferences-Locations Нажмите маленькую стрелку под «Производные данные» и удалите эту папку. После того, как я сделал это, я мог вырезать и вставлять между раскадровками.

person jspicer    schedule 06.11.2019
comment
Большое спасибо, это подходящее решение после того, как вы справились с некоторыми сценами из раскадровки другого проекта. - person Miguel A.; 06.12.2019
comment
это единственное, что сработало для меня в Xcode 11.3 - person binsnoel; 24.02.2020

Та же проблема здесь. Я думаю, что это ошибка нового Xcode 11.

Нашел быстрый обходной путь. Вместо копирования и вставки контроллеров представления, что приведет к сбою Xcode, вы можете использовать cmd + D для дублирования контроллеров представления. Но это будет полезно, только если в той же раскадровке

person Antonio    schedule 20.10.2019

Выберите View Controller, Edit > copy

На другой раскадровке выберите «Правка» > «Вставить».

person tdt kien    schedule 27.10.2019
comment
После этого по-прежнему происходит сбой версии Xcode 11.1 (11A1027) - person Mohit G.; 07.11.2019

я нашел быстрый хак, перейдите в навигатор проекта, затем щелкните правой кнопкой мыши файл .storyboard и выберите «Открыть как исходный код».

вы получите свою раскадровку в формате xml, найдите и скопируйте класс контроллера и вставьте так же, как вы скопировали его в другую раскадровку. обязательно получите весь код контроллера представления.

            <!--Detail View Controller-->
    <scene sceneID="n6l-mp-H1E"> .... </scene>
person NiTrOs    schedule 17.10.2019
comment
Идеальное решение. Работал на меня - person Akash Bhardwaj; 17.11.2019

Похоже, у ядра есть проблемы при вставке всей раскадровки, но это происходит только тогда, когда открыты приложения симулятора. Закройте приложение симулятора и попробуйте вставить его, он отлично работает

person Saran Jasty    schedule 27.03.2020

Я попытался очистить производные данные и очистить проект и папку проекта, а также принудительно перезапустить Xcode несколько раз, но все это не сработало.

Также я не мог дублировать представления, так как мне нужно было скопировать другую раскадровку.

Что в конечном итоге помогло мне, так это открыть помощник редактора и перетащить все представления, которые мне нужно было скопировать.

person Ahmed Elashker    schedule 19.05.2020

ЗАКРОЙТЕ СИМУЛЯТОР! Это сработает и позволит копировать и вставлять контроллеры представления из разных раскадровок.

person Dhaval H. Nena    schedule 18.11.2020

Два возможных случая:

  • либо вам нужно копировать и вставлять из одного проекта в другой;
  • или в рамках одного и того же проекта, но с другой или той же раскадровкой.

Вы можете исправить это, закрыв эмулятор, работающий в фоновом режиме, а затем скопировав и вставив или скопировав и вставив из раскадровки (в формате XML).

person Milind Kumar    schedule 22.12.2019

Я обнаружил, что вместо выбора сцены работает выбор контроллера представления и выполнение копирования и вставки в новую раскадровку.

введите здесь описание изображения

person Eric    schedule 02.02.2020

У меня работало перетаскивание вместо копирования/вставки. Удачного кодирования!

перетаскивание

person Asil ARSLAN    schedule 30.03.2020

Я сталкиваюсь с этой проблемой много раз, похоже, из-за новой версии Xcode.

Вот решение, которое работает для меня.

Удалить производные данные и перезапустить XCode.

Очистите и соберите проект.

Убедитесь, что XCode не занят выполнением следующих задач:

  • Строительный проект

  • Индексирование (дождитесь окончания)

  • Текущий проект

  • Открытие раскадровки

Теперь вы можете попробовать скопировать один контроллер представления из одной раскадровки в другую, это возможно.

person Mr.Javed Multani    schedule 03.04.2020