繁体   English   中英

在捆绑包NSBundle中找不到名为“ MainStoryBoard”的情节提要

[英]Could not find a storyboard named 'MainStoryBoard' in bundle NSBundle

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

Google没做任何事情, 这个问题表明我检查了故事板的目标,但一切都准备就绪。 即使这样,如果没有准备就绪,模拟器也不会运行。

谁能指出我正确的方向?

我的应用程序可以在iPhone Simulator上正常运行,但是奇怪的是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”,并且按照上述步骤进行操作使应用再次识别了文件。

希望此解决方案有帮助。

模拟器不区分大小写,但设备区分大小写。 如果您的情节提要板称为MainStoryboard,而不是MainStoryBoard,则将导致您的问题。

只想提及我遇到的情况。 我不知道如何,但是情节提要板与目标断开了连接,尽管它仍然是项目的一部分。 要解决此问题,我打开情节提要,选择“文件检查器”(右侧面板上最左侧的图标),然后在“目标成员身份”下检查项目。 希望它可以帮助某人。

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

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

尝试了上述所有解决方案,但没有成功。

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

TARGETS->构建阶段缺少副本捆绑资源

移除Cocoapods时意外将其移除。

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

  1. 转到项目的TARGETS
  2. 单击左上角的plus (+) button
  3. 从下拉列表中选择“新建副本捆绑资源”
  4. 现在,添加您的Storyboard files (Main, Launchscreen etc). 还添加资产文件夹。 您可以通过单击底部的加号(+)按钮添加这些文件

屏幕截图

  1. 删除derived data content
  2. 从模拟器/设备中Delete the app ,然后再次运行

我以为您可能已删除情节提要,并决定在首次启动应用程序时使用.xib文件。 在这种情况下,Xcode将尝试查找不存在的情节提要。

对于这种情况,请单击项目> Info > Custom iOS Target Properties然后删除以下键值对: Main storyboard file base name

这对带标签栏的应用程序(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具有正确的目标成员身份,复制包资源,清理的构建文件夹等(大多数答案都指向此)。

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

如果您正在使用源代码进行导航,请尝试使用以下代码

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

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

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

我正在构建一个内部带有情节提要的动态框架,并且在构建用于测试框架的测试应用程序中,出现了此错误。

我的代码如下所示:

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

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

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];

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

另外,您可以更新您的plist,我发现更改一个列表不会更改另一个列表。

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

检查默认情节提要的名称。

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

为防止这种情况的发生,我不得不更改处理情节提要文件的方式。 编辑情节提要后,保存文件,然后退出XCode。 这似乎可以防止问题发生。

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

我在代码中调用情节提要时发生了这个问题,原因是我在情节提要中使用了不同的单词。

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

至少尝试一下。

当我在模拟器上安装了具有相同名称的以前的应用程序时,这发生了。

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

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

当我向UIAppFonts添加大约150种字体时,设备上出现此错误。
在我将他们的数量减少到100后,它消失了。

在一个包含有或没有后缀〜iPad或〜iPhone后缀的故事板的项目中,我遇到了这个问题,例如MainStoryboard.storyboard和MainStoryboard〜iPad.storyboard。

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

要解决此问题,您可以停止使用〜iPad / iPhone后缀,或在“复制捆绑包资源”阶段确保文件顺序正确。

(使用XCode6.2beta2)

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

对我来说,解决方案是,我只需要将MainStoryboard添加到Bundle Resources中即可 在那之后,它工作正常。

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

转到构建阶段>复制捆绑资源中的info.plist并使用图标“ +”添加情节提要

就我而言,这是Mac应用程序框架内的情节提要。 我正在使用:

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

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

let storyboard = NSStoryboard(name: "StoryboardName",
                            bundle: Bundle(identifier: "com.company.FrameworkName"))

有两种可能性,

  1. 确保将情节提要添加到目标中。

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) 

更新:Swift 5和iOS 13:

  1. 创建一个单视图应用程序。
  2. 删除Main.storyboard (右键单击并删除)。
  3. Info.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()
    }
}

现在你可以走了:)

我有类似的问题,但出现以下错误。

exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'MainStoryboard_iPhone' in bundle NSBundle

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM