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)>
Ответы
Ответ 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 становится.