46

几天前我开始了一个新应用程序,并开始使用模拟器对其进行测试。我从一个空项目开始并手动添加了故事板。模拟器可以很好地构建和运行我的应用程序,但是当我尝试构建到我的 iPhone 时,我收到消息“在 bundle NSBundle 中找不到名为 'MainStoryBoard' 的故事板”。

谷歌一无所获,这个问题建议我检查故事板的目标,但一切都准备就绪。即便如此,如果某些东西没有到位,模拟器也不会运行。

谁能指出我正确的方向?

4

27 回答 27

77

我的应用程序在 iPhone 模拟器上正常运行,但奇怪的是 Xcode 停止响应,我不得不强制退出 Xcode。当我重新启动 Xcode 时,我遇到“找不到名为 MainStoryboard .... 的情节提要”,

我已通过以下步骤解决了此问题:

  1. 将“MainStoryboard.storyboard”重命名为“MainStoryboard_1.storyboard”
  2. 打开位于“Supporting Files”文件夹中的文件“$your_app$-Info.plist”。将“主故事板文件基本名称”编辑为“MainStoryboard_1.storyboard”。
  3. 重新运行该应用程序,它对我有用。
  4. 我将我的故事板文件重命名为原来的“MainStoryboard.storyboard”。
  5. 将 .plist 文件编辑回其原始文件。
  6. 重新运行该应用程序,它对我有用。

由于某种原因,强制退出 Xcode 后无法识别文件“MainStoryboard.storyboard”,并且按照上述步骤使应用程序再次识别该文件。

希望这个解决方案有帮助..

于 2012-02-21T10:46:44.040 回答
35

模拟器不区分大小写,但设备是。如果您的故事板被称为 MainStoryboard,而不是 MainStoryBoard,这将导致您的问题。

于 2012-01-08T07:16:12.690 回答
24

只想提一下我遇到的场景。我不知道怎么做,但情节提要与目标断开了连接,尽管它仍然是项目的一部分。为了解决这个问题,我打开了故事板,选择了“文件检查器”(右侧面板上最左边的图标)并检查“目标成员资格”下的项目。希望它可以帮助某人。

于 2014-07-01T13:56:39.420 回答
11

当您取消选择“使用基本国际化”并在不同的语言环境而不是您的特定本地化中运行模拟器时,就会出现问题。

例如,您在项目设置中指定了 zh-CN 本地化,但在 en-US 下运行模拟器。

于 2014-03-18T05:10:31.543 回答
7

尝试了上面提到的所有解决方案,但没有奏效。

经过深入研究发现了罪魁祸首:

TARGETS -> Build Phases 中缺少 Copy Bundle Resource

这在移除 Cocoapods 时被意外移除。

以下是解决此问题的步骤:

  1. 转到TARGETS您的项目
  2. 点击plus (+) button左上角的礼物
  3. 从下拉列表中选择 New Copy Bundle Resources
  4. 现在,添加您Storyboard files (Main, Launchscreen etc).还添加 Assets 文件夹。您可以通过单击底部的加号 (+) 按钮来添加这些文件

截屏

  1. 删除derived data content
  2. Delete the app从模拟器/设备并再次运行
于 2017-02-16T11:00:29.707 回答
4

我想您可能已经删除了故事板并决定在初始应用启动时使用 .xib 文件。在这种情况下,Xcode 会尝试找到一个不存在的故事板。

对于这种情况,单击 Project > Info>Custom iOS Target Properties并删除此键值对: Main storyboard file base name

于 2014-12-22T06:44:25.450 回答
4

Nitin Alabur的回答帮助了我,但间接地帮助了我。发布另一个答案以澄清:

我正在构建一个内部带有情节提要的动态框架,并且在我为测试框架而构建的测试应用程序中,我收到了这个错误。

我的代码如下所示:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];

我忽略了NSBundle这些东西,因为,嘿,我不知道捆绑包到底是什么。事实证明,这对于这个用例很重要,故事板将存在于应用程序的“捆绑包”之外(它位于我的框架的捆绑包中)。此代码将告诉 iOS 在当前类所在的包中查找情节提要(对我而言,它是包含我的框架的包):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
于 2016-06-14T19:57:53.283 回答
4

这帮助了我(Swift 2.1,Xcode 7.2)一个带有标签栏的应用程序

    let storyboard: UIStoryboard = UIStoryboard(name:"Main",bundle: NSBundle(forClass: self.dynamicType))
    let tabController = storyboard.instantiateViewControllerWithIdentifier("MyTabBarIdentifier") as! UITabBarController

我的 Main.storyboard 具有正确的目标成员资格、复制包资源、清理的构建文件夹等(大多数答案都指向这个)。

于 2016-01-28T16:11:30.200 回答
3

一个简单的清洁为我纠正了错误。

于 2015-05-28T21:30:00.280 回答
3

更新:Swift 5 和 iOS 13:

  1. 创建单一视图应用程序。
  2. 删除Main.storyboard(右键单击并删除)。
  3. 从文件中的默认场景配置中删除Storyboard NameInfo.plist在此处输入图像描述
  4. 打开SceneDelegate.swift和更改func scene
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }
}

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).x

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

现在你可以走了:)

于 2019-10-22T12:42:48.133 回答
3

如果您用于源代码导航,请尝试使用以下代码

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

通常人们会输入“Main.storyboard”作为名称,因为这实际上是文件的名称,但出于 Obj-C 编码的目的,“X.storyboard”的名称为“X”,所以在这种情况下, @“主要的”。

于 2015-11-19T06:07:00.077 回答
2

转到您的项目,选择您的目标并从菜单中下拉以重新选择您的故事板。

另外,你可以更新你的 plist,我发现改变一个并没有改变另一个。

于 2012-11-01T14:13:23.000 回答
2

您只需要检查文件夹.plist下的配置文件 ( )Supporting files

检查默认故事板的名称。

于 2015-11-20T15:54:15.350 回答
2

我也有同样的问题,导致这种异常的原因是我写了“Main.storyboard”而不是“Main”。我们不必指定 .storyboard 扩展名。

于 2017-04-25T05:29:07.933 回答
1

当我在模拟器上安装了一个同名的应用程序时,这发生在我身上。

我已经删除了以前的应用程序,在“部署信息”上重新选择了 Storyboard,重新运行该应用程序,一切正常。

于 2014-08-16T12:14:16.833 回答
1

我有类似的问题,我收到以下错误。

异常“NSInvalidArgumentException”,原因:“在捆绑包 NSBundle 中找不到名为“MainStoryboard_iPhone”的故事板

我通过更新 plist 文件来修复它。只需转到编辑->查找->在工作区中查找并搜索“故事”。现在更新故事板的适当名称。

于 2012-03-19T20:59:47.067 回答
1

当我在代码中调用情节提要时发生了这个问题。原因是我为情节提要使用了不同的“单词”。我这样解决了

转到 Targets -> info ,选择 info,复制情节提要的名称并将其粘贴到您调用情节提要的位置。

至少试一试……

于 2014-01-13T07:34:41.607 回答
1

当我不小心打开了第二次安装 Xcode 的项目时,我遇到了这个问题。它永久破坏了我的项目文件(这是可以理解的)。

于 2013-03-07T15:22:09.400 回答
1

为了防止这种情况发生,我不得不改变我使用故事板文件的方式。编辑故事板后保存文件,然后退出 XCode。这似乎可以防止问题发生。

于 2013-02-28T21:23:02.390 回答
1

有2种可能,

  1. 确保您的 Storyboard 已添加到您的目标中。

Select Storyboard > Go to file inspector (first right tab) > Check Target Membership

在此处输入图像描述

  1. 用适当的bundle.

    • 如果情节提要与您正在处理的目标相同,则使用bundle = nil
    • 如果情节提要与您正在处理的目标不同,请尝试以下代码来初始化捆绑包和情节提要。

      let bundle = Bundle(for: MyClass.self)
      let storyboard = UIStoryboard(name: "Main", bundle: bundle)
      
于 2017-11-04T09:49:49.557 回答
0

我在一个项目中遇到了这个问题,该项目的情节提要带有和不带有 ~iPad 或 ~iPhone 后缀,例如 MainStoryboard.storyboard 和 MainStoryboard~iPad.storyboard。

问题是 MainStoryboard.storyboard 在编译到构建目录时覆盖了 MainStoryboard~iPad.storyboard。如果文件以相反的顺序编译,则两者都将被保留而不会出现问题。我不知道为什么会这样。

为了解决这个问题,您可以停止使用 ~iPad/iPhone 后缀或确保文件在 Copy Bundle Resources 阶段中的顺序正确。

(使用XCode6.2beta2)

于 2015-03-23T22:00:37.420 回答
0

一个非常愚蠢的,但我的 .plist 的“主故事板文件基本名称(iPad)”条目中有“MainStoryboard.storyboard”,而不仅仅是“MainStoryboard”。

于 2015-03-30T14:19:30.050 回答
0

如果您最近将 iOS sim 重置为默认设置,检查其首选项中的区域设置也很有用。我正在使用俄语作为唯一语言环境的应用程序,并且在 sim 重置后 xCode 停止启动应用程序,因为 sim 语言环境设置为英语。

于 2012-12-02T18:29:49.190 回答
0

当我将大约 150 种字体添加到UIAppFonts.
在我将他们的数量减少到大约 100 之后,它就消失了。

于 2013-01-11T04:16:53.280 回答
0

就我而言,它是 Mac 应用程序框架内的故事板。我正在使用:

let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)

并且需要使用框架的包标识符来获取正确的包:

let storyboard = NSStoryboard(name: "StoryboardName",
                            bundle: Bundle(identifier: "com.company.FrameworkName"))
于 2017-10-23T01:14:04.527 回答
0

转到 Build Phases > Copy Bundle Resources 上的 info.plist 并使用图标“+”添加故事板

于 2015-10-15T18:46:38.297 回答
0

我的解决方案是,我只需要将 MainStoryboard 添加到Bundle Resources。之后,它工作正常。

项目 -> 构建阶段 -> 复制捆绑资源 -> 单击+按钮并添加您的文件。

于 2015-09-29T16:16:48.363 回答