无法在捆绑NSBundle中find名为“MainStoryBoard”的故事板
几天前我开始了一个新的应用程序,并开始使用模拟器来testing它。 我从一个空的项目开始,手动添加故事板。 模拟器build立和运行我的应用程序就好,但是当我尝试build立到我的iPhone我得到的消息' 无法find一个名为'MainBase'的故事板捆绑NSBundle '。
谷歌什么都没有提出, 这个问题build议我检查了我的故事板的目标,但一切都已到位。 即便如此,如果不能到位,模拟器也不会运行。
任何人都可以指向正确的方向吗?
模拟器不区分大小写,但设备是。 如果您的故事板被称为MainStoryboard,而不是MainStoryBoard,这将导致您的问题。
我有我的应用程序在iPhone模拟器上正常工作,但奇怪的Xcode停止响应,我不得不强制退出Xcode。 当我重新启动Xcode时遇到“找不到名为MainStoryboard ….的故事板”
我已经通过以下步骤解决了这个问题:
- 将“MainStoryboard.storyboard”重命名为“MainStoryboard_1.storyboard”
- 打开位于“支持文件”文件夹中的“$ your_app $ -Info.plist”文件。 将“主要故事板文件基本名称”编辑为“MainStoryboard_1.storyboard”。
- 重新运行应用程序,它为我工作。
- 我将故事板文件重命名为原来的“MainStoryboard.storyboard”。
- 将.plist文件编辑回原来的位置。
- 重新运行应用程序,它为我工作。
出于某种原因,在强制退出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。
下面是解决这个问题的步骤:
- 去你的项目的
TARGETS
- 点击左上angular的
plus (+) button
- 从下拉菜单中select新的复制包资源
- 现在,添加你的
Storyboard files (Main, Launchscreen etc).
还要添加资产文件夹。 您可以点击底部的加号(+)button来添加这些文件
- 删除
derived data content
- 从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"))
有两种可能性,
- 确保你的故事板被添加到你的目标。
Select Storyboard > Go to file inspector (first right tab) > Check Target Membership
-
用合适的
bundle
初始化故事板。- 如果故事板处于同一目标中,则使用
bundle = nil
-
如果故事板与您正在处理的目标不同,请尝试下列代码来初始化包和故事板。
let bundle = Bundle(for: MyClass.self) let storyboard = UIStoryboard(name: "Main", bundle: bundle)
- 如果故事板处于同一目标中,则使用