类未显示 NIB 的视图
Posted
技术标签:
【中文标题】类未显示 NIB 的视图【英文标题】:Class not showing view from NIB 【发布时间】:2014-02-19 04:45:10 【问题描述】:当我调用视图控制器时,它显示为空白,并且似乎没有正确调用我的 NIB 中的布局。我至少有 5 个其他类尊重我的 NIB 布局。
我有一堂课chwFinishedViewController.h
在我的故事板上,我有一个UIViewController
,它被分配了这个类并给定了故事板ID complete
。看下面的截图
这里是chwFinishedViewController.m
#import "chwFinishedViewController.h"
@interface chwFinishedViewController ()
@end
@implementation chwFinishedViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
return self;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
@end
这就是我如何称呼控制器。控制器调用之前的一切都正确执行:
if (!error)
chwFinishedViewController *complete = [[chwFinishedViewController alloc] init];
[self.navigationController pushViewController:complete animated:YES];
【问题讨论】:
我已经编辑了我的故事板帖子 我对你的代码有一点批评。如果方法只包含super
类对该方法的调用,您可能希望完全删除该方法。例如,viewDidLoad
和 didReceiveMemoryWarning
。
【参考方案1】:
试试这个:
chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil];
您的 xib 和 chwFinishedViewController 构造函数之间没有关系。你只使用init
,它什么也没做。 Here's apple doc.
编辑
您使用故事板。所以试试这个:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
chwFinishedViewController* complete = [storyboard instantiateViewControllerWithIdentifier:@"complete"];
【讨论】:
它返回:“'chwFinishedViewController' 没有可见的@interface 声明选择器'initWithNibName:'” @user3085646,抱歉,请改用initWithNibName:bundle:
。
您的故事板编辑工作正常。我从类似的东西开始,但我使用的是chwFinishedViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"complete"];
,但这引发了一个完全不同的错误。非常感谢。
@user3085646,不客气!【参考方案2】:
you have just init the controller..
use initWithNibName instead of only init
【讨论】:
【参考方案3】:使用这个...
chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil];
【讨论】:
嗯。这给了我:'NSInternalInconsistencyException',原因:'Could not load NIB in bundle:'NSBundle /.../Chewsey.app> (loaded)' with name 'complete'' 我的故事板被命名为“Main”,但 main.storyboard 上的 UIViewController 的 storyboardID 为“complete”。是因为我使用的是 initWithNibName:[storyboardID] 而不是 NIB 文件的名称?【参考方案4】:应该是:
chwFinishedViewController *complete = [[chwFinishedViewController alloc] initWithNibName:@"complete" bundle:nil];
希望这会有所帮助.. :)
【讨论】:
【参考方案5】:我遇到了类似的问题,我的解决方案是删除 viewcontroller 类的代码中遗留的空 loadView 方法。
【讨论】:
以上是关于类未显示 NIB 的视图的主要内容,如果未能解决你的问题,请参考以下文章