XIB文件使用默认的ViewController类而不是文件所有者中设置的类

时间:2013-10-10 21:13:09

标签: ios objective-c xcode

在任何人将此标记为重复之前,我已经彻底搜索了Stack Overflow并且没有任何建议有所帮助。

问题:我在Master-Detail app添加了一个自定义视图,该视图在点击button时被推到主视图之上。我已将xib文件的文件所有者设置为自定义类。如果我连一个IBOutlet连接,应用程序崩溃并说“类不符合键值的关键值”我已将NSLog放入我自定义的viewDidLoad函数中我看到它从未被实例化过。我觉得我可能错过了一个非常简单的步骤,但从我从其他所有帖子中可以看出这个问题,他们的解决方案对我不起作用。

SettingsViewController.m:

#import "SettingsViewController.h"

@interface SettingsViewController ()

@end

@implementation SettingsViewController

- (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 from its nib.
    NSLog(@"viewDidLoad");
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

启动视图的代码行:

UIViewController *settingsViewController = [[UIViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
[self.navigationController pushViewController:settingsViewController animated:YES];

我已经通过堆栈溢出尝试的事情:

  1. 确保将File的Owner类设置为自定义类名

  2. 确保代码中已删除或重命名的IBOutlets中没有任何额外viewcontroller

  3. 删除文件并重新创建

  4. 清理项目kill xcode,从设备上删除该应用,重新打开xcode并重建项目

  5. 从头开始重建项目

  6. 提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

这一行:

UIViewController *settingsViewController = [[UIViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];

应该是:

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];

文件所有者类的名称基本上只是IB告诉它可用连接的信息。在实例化期间实际上并未使用它。通过调用[[UIViewController alloc] ...,您正在创建一个普通的UIViewController实例(显然没有定义您的密钥)。