Подтвердить что ты не робот

Xcode 9 сбой при открытии раскадровки

XCode 9 GM Candidate 1 в настоящее время сбой при открытии раскадровки.

ProductBuildVersion: 9A235

UNCAUGHT EXCEPTION (NSInternalInconsistencyException): Could not find class named UIImage
UserInfo: (null)
Hints: 
  0: Replacement view is installing: <IBStoryboardCanvasViewController: 0x7fdf6d7f7d70 representing: (null)>
4b9b3361

Ответ 1

Для меня это сбой при открытии любой раскадровки или xib в моем приложении. Я создал новый проект приложения с одним представлением, открыл свою раскадровку без проблем, снова открыл свой собственный проект - и он начал открывать раскадровки и xibs, как обычно. Вероятно, проблема кеширования какая-то.

Вот подробности об аварии, с которой я столкнулся:

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
Sending _openAs: to <IDEDocumentController: 0x7f944580a970> from <NSMenuItem: 0x7f94249528d0 Interface Builder - Storyboard>
ProductBuildVersion: 9A235
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEInterfaceBuilder/IDEInterfaceBuilder-13196/InterfaceBuilderKit/IssueProvider/IBIssueProvider.m:72
Details:  castedInstance should be an instance inheriting from IBDocument, but it is IDEPegasusSourceEditor.SourceCodeDocument
Object:   <IBIssueProvider: 0x7f94366a73d0>
Method:   -updatedIssuesForDocument:

Другая авария, которую я испытал, и которая была исправлена ​​так же:

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
Sending openClickedNavigableItemAction: to <IDEStructureNavigator: 0x7ff718acde20 representing: <DVTExtension 0x7ff70acf22e0: Structure Navigator (Xcode.IDEKit.Navigator.Structure) v0.1 from com.apple.dt.IDEKit>> from <IDENavigatorOutlineView: 0x7ff7169ba340>
ProductBuildVersion: 9A235
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-13247/IDEKit/Editor/IDEEditorContext.m:1935
Details:  Unexpected document in IDEDocumentController:<IBXIBDocument: 0x7ff6fb013a00>(  0   -[IDEEditorDocument init] (in IDEKit)

Ответ 2

У меня была такая же проблема, но в моем случае она не была решена путем удаления ключей nil. Как подчеркнул Влад Валентин, это было связано с UITabBarViewController, которое я имел в своей раскадровке.

Проблема, как указано в ошибке, возникшей в отчете о сбое Xcode:

UNCAUGHT EXCEPTION (NSInternalInconsistencyException): Could not find class named UIImage

связанный с фоновым изображением. Я назначил tabBar. Как только я удалил изображение из исходного кода Storyboard, я смог снова открыть интерфейс Builder.

Удалить

<tabBar key="tabBar" contentMode="scaleToFill" backgroundImage="Tabbar background" id="W28-zg-YXA">

Когда я попытался повторно добавить изображение с помощью Interface Builder, Xcode бросил то же исключение. Я прибегал к загрузке изображения программно. Надеюсь, что это поможет, и спасет некоторых людей, чтобы полностью воссоздать их UITabBarViewController.

Ответ 3

У меня такая же проблема. В моем случае я обнаружил, что он постоянно сбой при открытии через проводник файлов, тогда как открытие через Open Quickly (CMD + SHIFT + O) не приводит к сбою XCode.

Ответ 4

Проблема - это тег ключа nil (по крайней мере, для моего случая)

<nil key="simulatedBottomBarMetrics"/>

или в целом

<nil key="<generic_name>"/>

У этого есть его копия

<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>

или в целом

<<generic_name> key="generic_name"/>

Удаление всех из них решает проблему.

  • Откройте раскадровку в качестве исходного кода
  • Поиск и удаление: <nil key="simulatedBottomBarMetrics"/> или любой <nil key="<generic_name>"/> (замените <generic_name> на ваше имя тега)
  • Найдите и удалите свою счетную часть: <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/> или любой << generic_name > key="generic_name"/> (замените <generic_name> на ваше конкретное имя тега)
  • Сохранить и открыть раскадровку обычно
  • Enjoy

EDIT:

Эти теги, по-видимому, связаны и находятся в исходном коде Storyboard UITabBarController, однако их копии разбросаны вокруг UIViewControllers, подключенного к UITabBarController. Может быть один, два или более уровней ниже.

Ответ 5

Я нашел решение для своего дела. Он рушился с UITabBarViewController.

  • Откройте раскадровку в качестве исходного кода
  • Поиск вашего UITabBarViewController
  • Удалить панель вкладок
  • Открыть сценарий в качестве конструктора интерфейса
  • Создайте новую панель вкладок и подключите необходимые контроллеры корневого представления.

Как сказал Микеле Шиллачи, вы можете попытаться удалить какой-либо контроллер представления и проверить, разрешило ли это проблему.

Ответ 6

Существует известная ошибка с вкладками, содержащими элементы панели табуляции. Примечания к выпуску Xcode 9.1 подтверждают это и предлагают обходной путь:

Конструктор интерфейсов

UITabBarItem, настроенный как системный элемент в раскадровке или xib, вызывает сбой сборки. (34197132)

Временное решение. Настройте в качестве настраиваемого элемента в Interface Builder, затем reset элемент панели вкладок в желаемый системный элемент в методе awakeFromNib контроллера вида.

Ответ 7

Я удалил <nil key ="....">, но это не сработало. Поэтому я попробовал это (от @Vlad Valentin):

  • Откройте раскадровку в качестве исходного кода.
  • Найдите tabBarController

     <scene sceneID="RIF-kY-Kwk">
        <objects>
            <tabBarController storyboardIdentifier="mainViewController" id="p5V-Jj-erc" customClass="MainViewController" customModule="yourModule" customModuleProvider="target" sceneMemberID="viewController">
                <tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="kWD-Cd-EAU">
                    <rect key="frame" x="0.0" y="0.0" width="375" height="49"/>
                    <autoresizingMask key="autoresizingMask"/>
                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                </tabBar>
                <connections>
                    <segue destination="FQU-DF-g8S" kind="relationship" relationship="viewControllers" id="wf7-sS-3aP"/>
                    <segue destination="cVl-bj-mqD" kind="relationship" relationship="viewControllers" id="A5l-iP-1pv"/>
                    <segue destination="yE9-HB-Hqo" kind="relationship" relationship="viewControllers" id="U4m-N7-DeC"/>
                    <segue destination="PmG-7U-DMm" kind="relationship" relationship="viewControllers" id="u4J-Y7-Z51"/>
                </connections>
            </tabBarController>
            <placeholder placeholderIdentifier="IBFirstResponder" id="APY-5z-hrA" userLabel="First Responder" sceneMemberID="firstResponder"/>
        </objects>
        <point key="canvasLocation" x="-3126" y="1236"/>
    </scene>
    
  • storyboardIdentifier="mainViewController", customClass="MainViewController" и <connections>..</connections> важны для вас. Скопируйте и вставьте его.

  • Удалить scene.
  • Теперь вы можете открыть раскадровку с помощью Interface Builder.
  • Добавить контроллер панели вкладок (Перетащите Drop и удалите контроллер дочернего представления.)
  • Исходный код Go Stroyboard и вставьте storyboardIdentifier, customClass и connections.

Ответ 8

Простое исправление:

Просто поместите insetsLayoutMarginsFromSafeArea="NO" в <tabBar key="tabBar" contentMode="scaleToFill" id="ytw-4N-0RV"> и удалите все <nil key ="...."> из исходного кода раскадровки.

например:

<tabBarController id="mhN-Gc-eXK" sceneMemberID="viewController" restorationIdentifier="tabbar" storyboardIdentifier="tabbar" customClass="TabbarMainViewController">
    <tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="ytw-4N-0RV">
        <rect key="frame" x="0.0" y="0.0" width="320" height="49"/>

Ответ 9

Я заменил это

<tabBar key="tabBar" contentMode="scaleToFill" translucent="NO" backgroundImage="background_tabbar" selectionIndicatorImage="background_tabbar_item" id="Z9r-yE-1Zs">

на этом

<tabBar key="tabBar" contentMode="scaleToFill" id="Z9r-yE-1Zs">

и Xcode больше не разбивается, когда я пытаюсь открыть раскадровку

Ответ 10

Итак, у меня возникла проблема, по которой, как только я открыл раскадровку в XCode 9, файл был изменен (что не является необычным для XCode), но тогда всякий раз, когда я запускал приложение с помощью контрольных точек исключения, он разбился. Нажатие продолжения от отладчика позволило приложению нормально работать.

Глядя на то, что XCode изменил в файле раскадровки, оказалось, что в верхней части файла перед элементом xml 'scenes' он добавлял:

<customFonts key="customFonts">
    <array key="GillSans.ttc">
        <string>GillSans</string>
        <string>GillSans-Light</string>
    </array>
</customFonts>

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

Ответ 11

У меня была одна и та же проблема: раскадровка, созданная в Xcode 8, зависала бы в Xcode 9. После того, как я разделил свою раскадровку, экспортируя представления один за другим (используя редактор /Refactor to Stoyboard - функция, которую я не знал, существовала пока я не был поражен этой проблемой), я обнаружил, что два конкретных вида заставляют Xcode висеть.

В обоих этих представлениях я добавил несколько элементов в UITabBar - кнопку слева, гибкое пространство и кнопку справа. Если Xcode попытался отобразить это, он зависает. Если бы я быстро нажал на любую другую раскадровку, как только эти "отравленные" взгляды были замечены, они также зависали.

Таким образом, решение заключается в том, чтобы открыть проект в Xcode 8, удалить все из одного элемента из TabBar, удалить любые папки Derived Data, выйти из Xcode 8, загрузить Xcode 9, выполнить Product/Clean, и если вам повезет, вам будет хорошо.

Ответ 12

Попробуйте открыть еще один проект ".storyboard", а затем вернитесь к проекту, который вызывает сбой Xcode!

У меня была эта точная проблема с Xcode 9.1 (9B55) по проекту, который вчера был в порядке. Сегодня, когда я пытался открыть любой файл ".storyboard/.xib", Xcode сбой!

Как я уже сказал, я удалил содержимое тега "<nil key=...". Это сработало, но между тем я открыл еще один проект раскадровки. Затем я восстановил все свои изменения и снова работал.

Это, по-видимому, не вызвано содержимым тега "<nil key=...", а каким-то странным состоянием, в котором Xcode становится.