无法在包中加载 NIB:'NSBundle 错误

Posted

技术标签:

【中文标题】无法在包中加载 NIB:\'NSBundle 错误【英文标题】:Could not load NIB in bundle: 'NSBundle ERROR无法在包中加载 NIB:'NSBundle 错误 【发布时间】:2013-08-27 11:22:31 【问题描述】:

我已经尝试了我在谷歌和 *** 上阅读的所有内容,但似乎没有任何建议有效。我已经坚持了 2 天试图修复它,但我希望你们能帮助我并提出一些我没有尝试过的东西......

这是我尝试过但似乎没有用的方法:

重启mac 重启 Xcode 重启模拟器 从模拟器中删除应用 干净的项目然后构建然后运行 更改情节提要名称(我将其从 ViewController 更改为 ViewController1,如您所见,我仍然收到错误 确保所有带有 ViewController1 的代码拼写正确 并且区分大小写 确保在构建阶段将情节提要添加到复制包中 从构建阶段将其删除并重新添加 确保情节提要未本地化,反之亦然 确保项目已添加到文件中的故事板目标 督察 我尝试禁用和启用自动布局都不起作用

这些似乎都不起作用我仍然在下面收到此错误,它不会在模拟器上加载我的应用程序,它只会在黑色加载屏幕上停止

**2013-08-27 12:07:15.057 Project52[647:11303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/Deondrae/Library/Application Support/iPhone Simulator/6.1/Applications/A350F56C-CC1C-462A-8D7C-63F2CB037EBC/Project52.app> (loaded)' with name 'ViewController1''
*** First throw call stack:
(0x159b012 0x12a8e7e 0x159adeb 0x408ef9 0x2cd7e7 0x2cddc8 0x2cdff8 0x2ce232 0x21d3d5 0x21d76f 0x21d905 0x226917 0x2bb5 0x1ea157 0x1ea747 0x1eb94b 0x1fccb5 0x1fdbeb 0x1ef698 0x25fddf9 0x25fdad0 0x1510bf5 0x1510962 0x1541bb6 0x1540f44 0x1540e1b 0x1eb17a 0x1ecffc 0x56ad 0x28d5)
libc++abi.dylib: terminate called throwing an exception
(lldb)** 

我怀疑这个错误是由下面的代码引起的...代码看起来要加载一个 xib 但这是 xcode 4.6 所以我们正在使用故事板...我可以更改代码以使其工作/load 故事板而不是过时的 xib ?

#import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;

更新:这是我现在在我的 appdelegate.m 中的内容(在尝试了建议之后),但我仍然收到错误:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[UIStoryboard storyboardWithName:@"ViewController1"  bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController1"];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;

更新 2: 我仍然收到错误('NSInvalidArgumentException',原因:'找不到名为 'ViewController1' 的情节提要)

我的故事板文件名为storyboard.storyboard 我在该故事板中只有一个视图控制器。 其中的视图控制器有一个自定义类 ViewController1

这就是我在 appdelegate.h 中的内容

#import <UIKit/UIKit.h>

@class ViewController1;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (nonatomic) UIViewController *viewController;
@property (nonatomic) UINavigationController *navigationController;
@property (nonatomic) UIStoryboard* storyboard;
@property (strong, nonatomic) UIWindow *window;

@end

这就是我在 appdelegate.m 中的内容

#import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    self.storyboard = [UIStoryboard storyboardWithName:@"storyboard" bundle:nil];
    self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];
    self.navigationController  = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window setRootViewController:self.viewController];
    [self.window addSubview:self.navigationController.view];
    [self.window makeKeyAndVisible];

更新 3:

在 appdelegate.h 和 .m 文件中使用来自 cmets 的 @calinchitu 代码似乎已经消除了错误......但是现在我在他在 .m 上提供的代码上关闭括号后特别收到警告文件显示“警告:控制到达非无效函数的结尾”唯一跳过它的方法是启用断点但警告仍然显示......我该如何摆脱这个?

更新 4:

添加返回YES;在@calin Chitu 在 cmets 中提供的代码的末尾,它应该消除警告。他的答案是正确的并且工作正常,但我没有足够的分数来标记答案,所以遇到此错误的其他人使用他的代码/建议它有效 - 不要忘记返回是的;

【问题讨论】:

什么是 ViewController1,我看到您导入 ViewController 但不是 ViewController1,但您似乎正在寻找的 NIB 名称是 ViewController1 那是导入 viewcontroller.h 清楚地表明那不是故事板......我唯一拥有的故事板被命名为 ViewController1,也是根视图控制器 【参考方案1】:

您可能对使用故事板和使用单个 nib 文件感到困惑。你有一个 ViewController1.xib 吗? 正如您所说的将故事板包含到边界中时,我假设 ViewController1 是您(或您的一个)故事板的一部分。如果是这样,那就去吧:

[self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];

当你在应用代理中而不是在视图控制器中使用:

self.viewController = [[UIStoryboard storyboardWithName:@"yourstoryboardname"  bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController1"];

【讨论】:

现在我用你的代码替换了我的代码行后得到了..我收到错误... ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“故事板( ) 不包含标识符为“ViewController1”的视图控制器,但我确实有名为 ViewController1 的情节提要以及设置为 ViewController1 的身份,并且还勾选了下面的部分,上面写着使用情节提要 ID 但仍然不起作用... 我应该把这行代码放在哪里? [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"]; 更新:这是我现在拥有的,但我仍然收到错误:-(BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions self.window = [[UIWindow alloc ] initWithFrame:[[UIScreen mainScreen] bounds]]; // 应用程序启动后自定义的覆盖点。 self.viewController = [[UIStoryboard storyboardWithName:@"ViewController1" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController1"]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible];返回是; 多行代码在 cmets 中不可读。请将此添加到您的问题中。 故事板和视图控制器是两个不同的东西,尽管它们都是用 IB 创建的。你的故事板真的有名字ViewController1吗?我对此表示怀疑。如果您确实有故事板,那么视图控制器的 nib 很可能是您故事板的一部分。【参考方案2】:

如果你想从 appdelegate 启动你的故事板:

在 appdelegate.h

@property (nonatomic) UIViewController *viewController;
@property (nonatomic) UINavigationController *navigationController;
@property (nonatomic) UIStoryboard* storyboard;
@property (strong, nonatomic) UIWindow *window;

在 appdelegate.m

self.storyboard = [UIStoryboard storyboardWithName:@"yourstoryboardname" bundle:nil];
self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];
self.navigationController  = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:self.viewController];
[self.window addSubview:self.navigationController.view];
[self.window makeKeyAndVisible];

确保在情节提要中您已将 StoryboardId 设置为视图控制器的 ViewController1。

您也可以跳过上面的整个代码,转到您的项目设置、摘要,然后使用您创建的故事板设置主故事板。

【讨论】:

我尝试将主情节提要设置为 ViewController1,这是我唯一的情节提要,但我仍然收到错误...现在我要替换我怀疑在我的 appdelegate 中导致此错误的整行代码.m 文件与您刚刚发布的文件一起查看是否有帮助。更新:我刚刚尝试过,但它现在给了我 8 个错误......我是否也替换了 -Bool 部分?更新 2:替换 bool 部分无济于事......在使用您的代码之前,我应该先在 appdelagate.h 文件中放入一些东西吗? 不要将情节提要名称与 StorybordId 混淆,您应该将情节提要 ID 设置为情节提要中的视图控制器的“ViewController1”。故事板名称正是您项目中故事板文件的名称,不带扩展名。 情节提要 ID 设置为 ViewController1,文件检查器中的情节提要名称设置为 MainStoryboard.storyboard,自定义类设置为 ViewController1...所有这些看起来都正确,但我仍然收到错误 请查看问题中的 UPDATE 2,因为我仍然收到错误消息。更新 3:使用您的代码,我似乎已经摆脱了该错误,但现在我在您提供的代码上关闭括号后收到警告。“警告:控制到达非无效函数的结尾” 请检查更新 3 的问题

以上是关于无法在包中加载 NIB:'NSBundle 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在包中加载 NIB:NSBundle

Swift 4:无法在包中加载 NIB:自定义 UITableViewCell 的“NSBundle”(无 IB)

NSInternalInconsistencyException 未捕获的异常“NSInternalInconsistencyException”,原因:“无法在包中加载 NIB:带有名称的 NSBu

无法在捆绑包中加载 NIB

无法在包中加载 Nib - 错误的 nibname 错误

Xamarin 工作室。单触。无法在捆绑包中加载 NIB ... 带有名称