打开Storyboard时,Xcode 9崩溃了。

32

XCode 9 GM候选版1在打开Storyboard时目前存在崩溃问题。

ProductBuildVersion: 9A235

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

我也遇到了这个问题。 - Kyle Browning
3
这是一个大问题...我已经好几天没法工作了 D: - Michele Schillaci
我终于找到了解决方案。
  • 我用Xcode 8打开了我的项目
  • 我逐个删除了一个视图控制器并尝试在Xcode 9中打开
  • 因此,当在Xcode 9中停止崩溃时,我知道哪个视图控制器出了问题
  • 我从我的ImageView中删除了一张图片,现在项目不会崩溃了。
- Michele Schillaci
我在使用Xcode 9时遇到了类似的问题。它不会崩溃,但每次都会冻结。我必须强制退出Xcode。 - Jonny
3
请参考DocPllana在这里提供的解决方案:https://dev59.com/UKbja4cB1Zd3GeqPaQyp#46808117。在我的设备上(使用Xcode 9.1),通过修复崩溃问题,无需进行任何代码更改即可解决该问题。 - wils
显示剩余3条评论
14个回答

23

对于我来说,当打开应用程序中的任何故事板或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)

你在哪里可以找到Xcode的崩溃日志?我找不到任何关于如何做到这一点的答案。 - thibaut noah
@thibautnoah,你可以在“用户报告”部分的Console.app中找到它们。 - pckill

21

我遇到了同样的问题,但是在我的情况下,删除nil键并没有解决它。正如Vlad Valentin所指出的那样,这与我在Storyboard中使用的UITabBarViewController有关。

根据Xcode崩溃报告中抛出的错误所述:

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

这与我为 tabBar 分配的 背景图片 相关。当我从Storyboard源代码中删除了这张图片后,我就可以重新打开Interface Builder。

删除:

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

当我尝试使用Interface Builder重新添加图像时,Xcode抛出了相同的异常。我已经采用编程方式加载图像。希望这可以帮助一些人,使他们无需完全重新创建他们的UITabBarViewController


2
删除 backgroundImage 键和值,对我很有帮助。谢谢! - Anders Friis
这正是我的问题。非常感谢您找出了这个问题。就像您所说的那样,只需在TabbarController中删除TabBar元素的backgroundImage即可。而且你无法在界面构建器中设置它。目前必须通过代码完成。 - James L Harris
移除backgroundImage="tabBar"对我有用!谢谢! - gborba
有趣的是,我按照建议进行了删除,但我的应用程序仍然无法正常运行。因此,我在所有场景中添加了iOS 11新的安全区域布局指南。然后再次添加了这行代码,它就起作用了!解决了我的所有问题。 - Gustavo_fringe

15

我遇到了类似的问题。在我的情况下,我发现当通过文件浏览器打开时,它会一直崩溃,但是通过快速打开(CMD+SHIFT+O)打开不会导致XCode崩溃。


2
这个技巧居然奏效了,真是太神奇了。哈哈,这肯定是个bug。谢谢! - Justin Stanley
1
救命稻草!无法打开xib、storyboard和launchscreen文件;/感谢分享) - alex1704
2
我也可以运行! - Mikael
对我也起作用了,只需要打开一次“快速打开”,然后它就可以为所有其他的故事板开始工作。 - Roberto Frontado

8
问题出在nil关键字标签上(至少在我的情况下) <nil key="simulatedBottomBarMetrics"/> 更一般地说 <nil key="<generic_name>"/> 它有一个对应项 <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/> 更一般地说 <<generic_name> key="generic_name"/> 移除它们就解决了问题。
1.将storyboard以源代码形式打开 2.搜索并删除:<nil key="simulatedBottomBarMetrics"/>或任何<nil key="<generic_name>"/>(用您特定的标记名称替换<generic_name>) 3.搜索并删除它们的对应项:<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>或任何<< generic_name > key="generic_name"/>(用您特定的标记名称替换<generic_name>) 4.保存并正常打开storyboard。 5.享受吧!
编辑: 这些标签似乎与UITabBarController的Storyboard源代码有关,但它们的对应项分散在连接到UITabBarController的UIVewControllers中。可能比UITabBarController低一级或两级。

1
目前看起来这个方法对我有效。我有一些<nil key="textColor">和<nil key="highlightedColor">,可能还有一些其他的问题。现在已经解决了,Storyboard可以正常加载了。 - Jonny
我已经替换了 <nil key="simulatedBottomBarMetrics"/><nil key="highlightedColor">。你有什么想法可以用来替换 <nil name="viewControllers"/> 吗? - LoveMeSomeFood
抱歉回复晚了 @Uma,我不确定,但您可以尝试在不删除此特定键名的情况下打开Storyboard。 - victor.vasilica
1
删除所有的<nil ..>和<nil name="viewControllers"/>,这对我有效。 - Nazir
@Nazir 我遇到了一个错误:“无法打开文档“Main.storyboard”。操作无法完成。(com.apple.InterfaceBuilder 错误-1.)” - LoveMeSomeFood
显示剩余8条评论

3

我找到了一个解决方法。问题出现在UITabBarViewController中。

  1. 将故事板打开为源代码
  2. 搜索你的UITabBarViewController
  3. 移除标签栏
  4. 将storybard打开为Interface builder
  5. 创建新的标签栏并连接所需的根视图控制器

正如Michele Schillaci所说,你可以尝试删除一些视图控制器,并检查是否解决了问题。


  1. 删除选项卡栏 < 这是否意味着要删除整个 tabBarController 标签?
- Jonny
对我来说,问题在于连接,这就是为什么storyboard崩溃的原因。但是我不得不添加一个新的tab bar控制器才能连接新的连接。 - Vlad Valentin

2

现在已知有一个关于包含系统tab bar项的选项卡栏的bug。Xcode 9.1发布说明承认了这一点,并提出了一个解决方法:

界面生成器

在storyboard或xib中配置为系统项目的UITabBarItem会导致构建失败。(34197132)

解决方法: 在Interface Builder中将其配置为自定义项,然后在视图控制器的awakeFromNib方法中将选项卡栏项重置为所需的系统项。


1

我删除了<nil key ="....">,但它没有起作用。所以我尝试了这个方法(来自@Vlad Valentin):

  1. Open the storyboard as source code.
  2. Search for 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>
    
  3. storyboardIdentifier="mainViewController", customClass="MainViewController" and <connections>..</connections> are important for you. Copy and paste it.

  4. Remove scene.
  5. Now you can open storyboard with Interface Builder.
  6. Add Tab Bar Controller (Drag Drop and remove child view controller.)
  7. Go Stroyboard source code and paste storyboardIdentifier, customClass and connections.

1
你是否已经删除了它们的对应项:<<key_name> key="<key_name>"> - victor.vasilica
是的。我的项目中有5个故事板,我检查了它们所有的标签都是nil。但是只有一个带有选项卡控制器的故事板无法打开。 - a.u.b

1

简单解决方法:

只需在您的故事板源代码中将<tabBar key="tabBar" contentMode="scaleToFill" id="ytw-4N-0RV">上的insetsLayoutMarginsFromSafeArea="NO"放置,并删除所有<nil key ="....">

E.g:

<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"/>

1
我发现之前安装的XCode版本是问题的根源。我原本认为只安装了一个版本,但在右键点击一个XCode项目文件后,我发现在“打开方式”下有很多版本。这些版本包括旧版的XCode 9测试版,各种稳定版以及XCode 8。
在我的Mac的应用程序目录中找不到这些版本,所以我意识到它们休眠在下载目录中。我所做的就是删除它们,Storyboard再也没有导致XCode 9.3冻结。

同样的问题,同样的解决方法,只不过是由于Xcode 9.3破坏了Xcode 10.2。将9.3从下载文件夹移到垃圾桶中,现在一切都正常了。很奇怪! - Jacob Pritchett
同样的问题已经解决了。我正在使用 Xcode 11 Beta 5。删除了所有之前的版本,现在一切正常。 - GIJoeCodes

1
我也遇到了这个问题。当我在Xcode中点击我的工作项目中的storyboard文件时,会出现崩溃(彩虹球旋转)。即使我创建一个新的单视图项目,这种情况也会发生。
对于我来说,重新启动Mac Book是一种解决方法。
希望这可以解决您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接