几天前我开始了一个新应用程序,并开始使用模拟器对其进行测试。我从一个空项目开始并手动添加了故事板。模拟器可以很好地构建和运行我的应用程序,但是当我尝试构建到我的 iPhone 时,我收到消息“在 bundle NSBundle 中找不到名为 'MainStoryBoard' 的故事板”。
谷歌一无所获,这个问题建议我检查故事板的目标,但一切都准备就绪。即便如此,如果某些东西没有到位,模拟器也不会运行。
谁能指出我正确的方向?
几天前我开始了一个新应用程序,并开始使用模拟器对其进行测试。我从一个空项目开始并手动添加了故事板。模拟器可以很好地构建和运行我的应用程序,但是当我尝试构建到我的 iPhone 时,我收到消息“在 bundle NSBundle 中找不到名为 'MainStoryBoard' 的故事板”。
谷歌一无所获,这个问题建议我检查故事板的目标,但一切都准备就绪。即便如此,如果某些东西没有到位,模拟器也不会运行。
谁能指出我正确的方向?
我的应用程序在 iPhone 模拟器上正常运行,但奇怪的是 Xcode 停止响应,我不得不强制退出 Xcode。当我重新启动 Xcode 时,我遇到“找不到名为 MainStoryboard .... 的情节提要”,
我已通过以下步骤解决了此问题:
由于某种原因,强制退出 Xcode 后无法识别文件“MainStoryboard.storyboard”,并且按照上述步骤使应用程序再次识别该文件。
希望这个解决方案有帮助..
模拟器不区分大小写,但设备是。如果您的故事板被称为 MainStoryboard,而不是 MainStoryBoard,这将导致您的问题。
只想提一下我遇到的场景。我不知道怎么做,但情节提要与目标断开了连接,尽管它仍然是项目的一部分。为了解决这个问题,我打开了故事板,选择了“文件检查器”(右侧面板上最左边的图标)并检查“目标成员资格”下的项目。希望它可以帮助某人。
当您取消选择“使用基本国际化”并在不同的语言环境而不是您的特定本地化中运行模拟器时,就会出现问题。
例如,您在项目设置中指定了 zh-CN 本地化,但在 en-US 下运行模拟器。
尝试了上面提到的所有解决方案,但没有奏效。
经过深入研究发现了罪魁祸首:
TARGETS -> Build Phases 中缺少 Copy Bundle Resource
这在移除 Cocoapods 时被意外移除。
以下是解决此问题的步骤:
TARGETS
您的项目plus (+) button
左上角的礼物Storyboard files (Main, Launchscreen etc).
还添加 Assets 文件夹。您可以通过单击底部的加号 (+) 按钮来添加这些文件derived data content
Delete the app
从模拟器/设备并再次运行我想您可能已经删除了故事板并决定在初始应用启动时使用 .xib 文件。在这种情况下,Xcode 会尝试找到一个不存在的故事板。
对于这种情况,单击 Project > Info
>Custom iOS Target Properties
并删除此键值对:
Main storyboard file base name
Nitin Alabur的回答帮助了我,但间接地帮助了我。发布另一个答案以澄清:
我正在构建一个内部带有情节提要的动态框架,并且在我为测试框架而构建的测试应用程序中,我收到了这个错误。
我的代码如下所示:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
我忽略了NSBundle
这些东西,因为,嘿,我不知道捆绑包到底是什么。事实证明,这对于这个用例很重要,故事板将存在于应用程序的“捆绑包”之外(它位于我的框架的捆绑包中)。此代码将告诉 iOS 在当前类所在的包中查找情节提要(对我而言,它是包含我的框架的包):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
这帮助了我(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 具有正确的目标成员资格、复制包资源、清理的构建文件夹等(大多数答案都指向这个)。
一个简单的清洁为我纠正了错误。
更新: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()
}
}
现在你可以走了:)
如果您用于源代码导航,请尝试使用以下代码
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
通常人们会输入“Main.storyboard”作为名称,因为这实际上是文件的名称,但出于 Obj-C 编码的目的,“X.storyboard”的名称为“X”,所以在这种情况下, @“主要的”。
转到您的项目,选择您的目标并从菜单中下拉以重新选择您的故事板。
另外,你可以更新你的 plist,我发现改变一个并没有改变另一个。
您只需要检查文件夹.plist
下的配置文件 ( )Supporting files
检查默认故事板的名称。
我也有同样的问题,导致这种异常的原因是我写了“Main.storyboard”而不是“Main”。我们不必指定 .storyboard 扩展名。
当我在模拟器上安装了一个同名的应用程序时,这发生在我身上。
我已经删除了以前的应用程序,在“部署信息”上重新选择了 Storyboard,重新运行该应用程序,一切正常。
我有类似的问题,我收到以下错误。
异常“NSInvalidArgumentException”,原因:“在捆绑包 NSBundle 中找不到名为“MainStoryboard_iPhone”的故事板
我通过更新 plist 文件来修复它。只需转到编辑->查找->在工作区中查找并搜索“故事”。现在更新故事板的适当名称。
当我在代码中调用情节提要时发生了这个问题。原因是我为情节提要使用了不同的“单词”。我这样解决了
转到 Targets -> info ,选择 info,复制情节提要的名称并将其粘贴到您调用情节提要的位置。
至少试一试……
当我不小心打开了第二次安装 Xcode 的项目时,我遇到了这个问题。它永久破坏了我的项目文件(这是可以理解的)。
为了防止这种情况发生,我不得不改变我使用故事板文件的方式。编辑故事板后保存文件,然后退出 XCode。这似乎可以防止问题发生。
有2种可能,
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)
我在一个项目中遇到了这个问题,该项目的情节提要带有和不带有 ~iPad 或 ~iPhone 后缀,例如 MainStoryboard.storyboard 和 MainStoryboard~iPad.storyboard。
问题是 MainStoryboard.storyboard 在编译到构建目录时覆盖了 MainStoryboard~iPad.storyboard。如果文件以相反的顺序编译,则两者都将被保留而不会出现问题。我不知道为什么会这样。
为了解决这个问题,您可以停止使用 ~iPad/iPhone 后缀或确保文件在 Copy Bundle Resources 阶段中的顺序正确。
(使用XCode6.2beta2)
一个非常愚蠢的,但我的 .plist 的“主故事板文件基本名称(iPad)”条目中有“MainStoryboard.storyboard”,而不仅仅是“MainStoryboard”。
如果您最近将 iOS sim 重置为默认设置,检查其首选项中的区域设置也很有用。我正在使用俄语作为唯一语言环境的应用程序,并且在 sim 重置后 xCode 停止启动应用程序,因为 sim 语言环境设置为英语。
当我将大约 150 种字体添加到UIAppFonts
.
在我将他们的数量减少到大约 100 之后,它就消失了。
就我而言,它是 Mac 应用程序框架内的故事板。我正在使用:
let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)
并且需要使用框架的包标识符来获取正确的包:
let storyboard = NSStoryboard(name: "StoryboardName",
bundle: Bundle(identifier: "com.company.FrameworkName"))
转到 Build Phases > Copy Bundle Resources 上的 info.plist 并使用图标“+”添加故事板
我的解决方案是,我只需要将 MainStoryboard 添加到Bundle Resources。之后,它工作正常。
项目 -> 构建阶段 -> 复制捆绑资源 -> 单击+按钮并添加您的文件。