无法在捆绑NSBundle中find名为“MainStoryBoard”的故事板

几天前我开始了一个新的应用程序,并开始使用模拟器来testing它。 我从一个空的项目开始,手动添加故事板。 模拟器build立和运行我的应用程序就好,但是当我尝试build立到我的iPhone我得到的消息' 无法find一个名为'MainBase'的故事板捆绑NSBundle '。

谷歌什么都没有提出, 这个问题build议我检查了我的故事板的目标,但一切都已到位。 即便如此,如果不能到位,模拟器也不会运行。

任何人都可以指向正确的方向吗?

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

我有我的应用程序在iPhone模拟器上正常工作,但奇怪的Xcode停止响应,我不得不强制退出Xcode。 当我重新启动Xcode时遇到“找不到名为MainStoryboard ….的故事板”

我已经通过以下步骤解决了这个问题:

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

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

希望这个解决scheme帮助

只是想提一下我遇到的情况。 我不知道如何,但故事板与目标断开,虽然它仍然是项目的一部分。 为了解决这个问题,我打开了故事板,select了“文件检查器”(最右边的图标),然后在“目标成员”下面检查项目。 希望它可以帮助别人。

当您取消select“使用基地国际化”并运行模拟器在不同的地区,而不是您的特定本地化时,会出现问题。

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

我以为你可能已经删除了故事板,并决定在最初的应用程序启动时使用.xib文件。 在这种情况下,Xcode会试图find一个不存在的故事板。

对于这种情况,请点击项目> 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与正确的目标成员资格,复制束资源,清理生成文件夹等(大多数答案指向这一点)。

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

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

我正在构build一个dynamic框架,里面有一个故事板,在构buildtesting框架的testing应用程序中,我收到了这个错误。

我的代码看起来像这样:

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

我忽略了NSBundle东西,因为,嘿,我不知道捆绑是什么。 对于这个用例来说,重要的是故事板将在应用程序的“包”之外存在(而不是在我的框架的包中)。 这段代码将告诉iOS在当前类中存在的bundle中查找故事板(对于我来说,是包含我的框架的包):

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

试过以上提到的所有解决scheme,但没有奏效。

彻底的研究发现罪魁祸首:

从目标 – >构build阶段中缺less复制包资源

这是意外删除,同时删除Cocoapods。

下面是解决这个问题的步骤:

  1. 去你的项目的TARGETS
  2. 点击左上angular的plus (+) button
  3. 从下拉菜单中select新的复制包资源
  4. 现在,添加你的Storyboard files (Main, Launchscreen etc). 还要添加资产文件夹。 您可以点击底部的加号(+)button来添加这些文件

截图

  1. 删除derived data content
  2. 从Simulator / Device中Delete the app ,然后重新运行

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

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

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

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

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

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

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

当我在代码中调用Storyboard时,发生了这个问题。原因是我用了不同的“word”作为storyboard.I解决了这个问题

转到目标 – >信息,select信息,复制故事板的名称,并将其粘贴到你正在调用故事板的地方。

至less试一下…。

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

我已经删除了以前的应用程序,在“部署信息”上重新select了故事板,重新运行应用程序,一切正常。

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

检查您的默认故事板的名称。

我也有同样的问题,是什么导致这种types的exception是我写了“Main.storyboard”而不是“主”。 我们不必指定.storyboard扩展名。

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

exception'NSInvalidArgumentException',原因:'在捆绑NSBundle中找不到名为'MainStoryboard_iPhone'的故事板

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

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

当我向UIAppFonts添加约150种字体时,在设备上出现此错误。
我把他们的人数减less到100人左右后,就消失了。

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

问题是当MainStoryboard.storyboard被编译到编译目录时,覆盖了MainStoryboard〜iPad.storyboard。 如果这些文件是按照相反的顺序编译的话,那么这两个文件都将被保留而不会出现问 我不知道为什么会发生这种情况。

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

(使用XCode6.2beta2)

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

我的解决scheme是,我只需要将MainStoryboard添加到捆绑资源 。 之后,它工作正常。

项目 – >构build阶段 – >复制包资源 – >点击+button,并添加您的文件。

转到您的info.plist上的“构build阶段”>“复制包资源”,并使用图标“+”添加故事板

就我而言,这是一个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)