用XIB替换故事板

时间:2012-04-08 12:16:10

标签: ios xcode interface-builder xcode4.3

如何用XIB替换故事板?

在尝试创建动态视图及其控制器时,我失去了新故事板的所有优点。现在,当我尝试将其从项目中删除时,我创建了一个带有自己的控制器的新XIB,并在项目设置中替换它:
enter image description here
现在,当尝试运行应用程序时,它崩溃了,日志显示以下内容:

2012-04-08 14:50:16.567 Bazaart[11340:15203] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x8c15c20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'

以下是代码:UIRootWindow:

#import <UIKit/UIKit.h>
@interface UIRootWindow : UIViewController
@end

及其相应的实施:

#import "UIRootWindow.h"
@implementation UIRootWindow

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    return self;
}
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)viewDidUnload {
    [super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end

修改
我按照菲利普的建议(见下文)。但是......我这样做的方式似乎不是最好的。我做得对吗?

UIRootWindow *wnd = [[UIRootWindow alloc] init];
[wnd view];
[self setWindow:wnd.window];

2 个答案:

答案 0 :(得分:7)

不要在主界面字段中放置任何内容。相反,在app delegate的didFinishLaunchingWithOptions:方法中加载顶级控制器,并在那里设置窗口的根控制器。

应用程序启动假定在那里提到的xib有一个文件所有者是UIApplication。 (较旧的模板用于执行此操作,一些示例项目仍然可以。)

答案 1 :(得分:0)

当您的应用程序启动时,XIB中的每个控制器都是根据您设置的类的名称创建的。然后,使用KVC设置您在视觉上连接的每个属性。该错误告诉您,在此过程的某处,“view”属性不正确。

我可以想到为什么会发生这种情况的两个原因:

  • 您没有为您的ViewController或XIB中的其他对象设置正确的类(在'Identity Inspector'中)
  • 您没有正确连接连接。 (在'Connections Inspector'中)

无论哪种方式,您都可以快速浏览XIB中的设置,注意属性“视图”的连接位置。