我几天前开始使用新的应用程序,并开始使用模拟器进行测试。我开始是一个空项目并手动添加故事板。模拟器构建并运行我的应用程序就好了但是当我尝试构建到我的iPhone时,我得到了消息“无法在捆绑NSBundle中找到名为'MainStoryBoard'的故事板'。
Google没有发现任何内容,this question建议我检查我的目标是否有故事板,但一切都已到位。即便如此,如果某些东西不存在,模拟器也不会运行。
有人能指出我正确的方向吗?
答案 0 :(得分:75)
我让我的应用程序在iPhone模拟器上正常工作,但奇怪的是Xcode停止响应,我不得不强制退出Xcode。当我重新启动Xcode时遇到“无法找到名为MainStoryboard的故事板......”,
我已按照以下步骤解决了此问题:
由于某种原因,强制退出Xcode后无法识别文件“MainStoryboard.storyboard”,并且按照上述步骤使应用程序再次识别该文件。
希望这个解决方案有所帮助..
答案 1 :(得分:35)
模拟器不区分大小写,但设备是。如果您的故事板被称为MainStoryboard,而不是MainStoryBoard,这将导致您的问题。
答案 2 :(得分:23)
只想提一下我遇到的情景。我不知道怎么做,但故事板与目标断开了,尽管它仍然是项目的一部分。为了解决这个问题,我打开了故事板,选择了"文件检查器"(右侧面板上最左边的图标)并检查"目标成员资格"下的项目。 希望它可以帮到某人。
答案 3 :(得分:9)
当您取消选择"使用Base Internationalization"并在不同的语言环境中运行模拟器而不是您的特定本地化。
例如,您在项目设置中指定了zh-CN本地化,但在en-US下运行模拟器。
答案 4 :(得分:6)
尝试了上述所有解决方案,但没有奏效。
经过深入研究后发现了罪魁祸首:TARGETS中缺少复制捆绑资源 - >建立阶段
在移除Cocoapods时意外删除了。
以下是解决此问题的步骤:
答案 5 :(得分:4)
这对于带有标签栏的应用程序
有帮助(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具有正确的目标成员资格,复制捆绑资源,清理了构建文件夹等(大多数答案都指向了这一点)。
答案 6 :(得分:4)
我认为您可能已删除了故事板,并决定在初始应用启动时使用.xib文件。在这种情况下,Xcode会尝试找到一个不存在的故事板。
对于这种情况,请点击项目> Info
> Custom iOS Target Properties
并删除此键值对:
Main storyboard file base name
答案 7 :(得分:3)
Nitin Alabur的答案对我有所帮助,但间接帮助了我。发布另一个答案澄清:
我正在构建一个带有故事板的动态框架,在我构建的测试应用程序中测试框架,我收到了这个错误。
我的代码看起来像这样:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
我忽略了NSBundle
的东西,因为,嘿,我不知道捆绑是什么。事实证明这对于这个用例来说非常重要,因为故事板将存在于应用程序的外部"捆绑" (它取而代之的是我的框架' s)。此代码将告诉iOS在当前类所在的包中找到故事板(对我来说,这是包含我的框架的包):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
答案 8 :(得分:3)
如果您在源代码上使用导航,请尝试使用以下代码
if(num%2==1)
int odd=1;
for(int i=0; i<num; i++){
String a="";
for(int j=1; j<=odd; j++)
{ a=odd+" ";
odd+=2;
System.out.print(a); }
System.out.println(); }
人们通常会为名称输入“Main.storyboard”,因为它实际上是文件的名称,但出于Obj-C编码的目的,“X.storyboard”的名称为“X”,所以在这个案例,@“Main”。
答案 9 :(得分:3)
简单的清洁为我纠正了错误。
答案 10 :(得分:2)
更新: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()
}
}
现在您可以去:)
答案 11 :(得分:2)
我也有同样的问题,造成这种类型异常的原因是我写过&#34; Main.storyboard&#34;而不是&#34; Main&#34;。我们不必指定.storyboard扩展名。
答案 12 :(得分:2)
您只需要检查.plist
文件夹
Supporting files
)
检查默认情节提要的名称。
答案 13 :(得分:2)
转到您的项目,选择目标并从菜单中下拉以重新选择故事板。
另外,你可以更新你的plist,我发现改变一个并没有改变另一个。
答案 14 :(得分:1)
当我在模拟器上安装了一个同名的应用程序时,就发生了这种情况。
我删除了之前的应用,重新选择了“部署信息”中的故事板,重新运行应用,一切正常。
答案 15 :(得分:1)
当我在代码中调用故事板时,这个问题发生在我身上。原因是我在故事板上使用了不同的“单词”。我解决了这个问题
转到目标 - &gt;信息,选择信息,复制故事板的名称并将其粘贴到您调用故事板的位置。
至少试试......
答案 16 :(得分:1)
我在第二次安装Xcode时意外打开了一个项目时遇到了这个问题。它永久地破坏了我的项目文件(这是可以理解的)。
答案 17 :(得分:1)
为了防止这种情况发生,我不得不改变使用storyboard文件的方式。编辑故事板后保存文件然后退出XCode。这似乎可以防止问题的发生。
答案 18 :(得分:0)
我在一个有或没有~iPad或~iPhone后缀的故事板的项目中遇到过这个问题,比如MainStoryboard.storyboard和MainStoryboard~iPad.storyboard。
问题是MainStoryboard.storyboard在编译到构建目录时覆盖了MainStoryboard~iPad.storyboard。如果文件以相反的顺序编译,则两者都将被保留而没有问题。我不知道为什么会这样。
为了解决这个问题,你可以停止使用~iPad / iPhone后缀,或者确保文件在Copy Bundle Resources阶段的顺序正确。
(使用XCode6.2beta2)
答案 19 :(得分:0)
非常愚蠢但我在我的.plist的“主故事板文件基本名称(iPad)”条目中有“MainStoryboard.storyboard”,而不仅仅是“MainStoryboard”。
答案 20 :(得分:0)
我的解决方案是,我只需要将MainStoryboard添加到 Bundle Resources 。之后,它运作正常。
项目 - &gt;构建阶段 - &gt;复制捆绑资源 - &gt;点击 + 按钮添加您的文件。
答案 21 :(得分:0)
转到构建阶段&gt;上的info.plist复制捆绑资源并使用图标&#34; +&#34;
添加故事板答案 22 :(得分:0)
当我向UIAppFonts
添加约150种字体时,我在设备上出现此错误
在我将他们的数量减少到大约100之后,它就消失了。
答案 23 :(得分:0)
如果您最近将iOS SIM重置为默认设置,则在其“首选项”中检查区域设置也很有用。我正在使用俄语作为唯一的语言环境进行应用程序,并且在重置sim后,xCode停止启动应用程序,因为sim语言环境设置为英语。
答案 24 :(得分:0)
就我而言,它是Mac应用程序框架内的故事板。我正在使用:
let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil)
并且需要使用框架的包标识符来获取正确的包:
let storyboard = NSStoryboard(name: "StoryboardName",
bundle: Bundle(identifier: "com.company.FrameworkName"))
答案 25 :(得分:0)
有两种可能性,
答案 26 :(得分:0)
我遇到了类似的问题,我收到了以下错误。
exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'MainStoryboard_iPhone' in bundle NSBundle
我通过更新plist文件来修复它。只需转到Edit-&gt; Find-&gt;在工作区中查找并搜索“故事”。现在更新故事板的相应名称。