如何用XIB替换故事板?
在尝试创建动态视图及其控制器时,我失去了新故事板的所有优点。现在,当我尝试将其从项目中删除时,我创建了一个带有自己的控制器的新XIB,并在项目设置中替换它:
现在,当尝试运行应用程序时,它崩溃了,日志显示以下内容:
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];
答案 0 :(得分:7)
不要在主界面字段中放置任何内容。相反,在app delegate的didFinishLaunchingWithOptions:方法中加载顶级控制器,并在那里设置窗口的根控制器。
应用程序启动假定在那里提到的xib有一个文件所有者是UIApplication。 (较旧的模板用于执行此操作,一些示例项目仍然可以。)
答案 1 :(得分:0)
当您的应用程序启动时,XIB中的每个控制器都是根据您设置的类的名称创建的。然后,使用KVC设置您在视觉上连接的每个属性。该错误告诉您,在此过程的某处,“view”属性不正确。
我可以想到为什么会发生这种情况的两个原因:
无论哪种方式,您都可以快速浏览XIB中的设置,注意属性“视图”的连接位置。