【问题标题】:Class not showing view from NIB类未显示 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 类对该方法的调用,您可能希望完全删除该方法。例如,viewDidLoaddidReceiveMemoryWarning

标签: ios xcode uiviewcontroller storyboard nib


【解决方案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 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多