[英]Could not find a storyboard named 'MainStoryBoard' in bundle NSBundle
几天前,我启动了一个新应用,并开始使用模拟器进行测试。 我从一个空项目开始,然后手动添加情节提要。 模拟器可以很好地构建和运行我的应用程序,但是当我尝试构建到iPhone时,出现消息“在NSBundle捆绑包中找不到名为'MainStoryBoard'的故事板 ”。
Google没做任何事情, 这个问题表明我检查了故事板的目标,但一切都准备就绪。 即使这样,如果没有准备就绪,模拟器也不会运行。
谁能指出我正确的方向?
我的应用程序可以在iPhone Simulator上正常运行,但是奇怪的是Xcode停止了响应,我不得不强制退出Xcode。 当我重新启动Xcode时,遇到“找不到名为MainStoryboard的故事板...”,
我已通过以下步骤解决了此问题:
由于某种原因,在强制退出Xcode后无法识别文件“ MainStoryboard.storyboard”,并且按照上述步骤进行操作使应用再次识别了文件。
希望此解决方案有帮助。
模拟器不区分大小写,但设备区分大小写。 如果您的情节提要板称为MainStoryboard,而不是MainStoryBoard,则将导致您的问题。
只想提及我遇到的情况。 我不知道如何,但是情节提要板与目标断开了连接,尽管它仍然是项目的一部分。 要解决此问题,我打开情节提要,选择“文件检查器”(右侧面板上最左侧的图标),然后在“目标成员身份”下检查项目。 希望它可以帮助某人。
当您取消选择“使用基本国际化”并在不同的语言环境而不是您的特定语言环境中运行模拟器时,就会出现问题。
例如,您在项目设置中指定zh-CN本地化,但在en-US下运行模拟器。
我以为您可能已删除情节提要,并决定在首次启动应用程序时使用.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"))
有两种可能性,
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)
更新:Swift 5和iOS 13:
Info.plist
文件的默认场景配置中删除情节提要名称 : 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.