如何用 XIB 替换 Storyboard?
在尝试动态创建 View 及其 Controller 时,我失去了新 Storyboard的所有优势。现在,在尝试将其从项目中删除时,我创建了一个带有自己 Controller 的新 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
编辑:
我有 Phillip 建议的窗口(见下文)。但是......我做的方式似乎不是最好的。我做得对吗?
UIRootWindow *wnd = [[UIRootWindow alloc] init];
[wnd view];
[self setWindow:wnd.window];
最佳答案
不要在主界面字段中输入任何内容。相反,在应用委托(delegate)的 didFinishLaunchingWithOptions: 方法中加载您的顶级 Controller ,并在那里设置窗口的根 Controller 。
应用程序启动假定那里提到的 xib 有一个文件所有者是一个 UIApplication。 (旧模板曾经这样做,一些示例项目仍然这样做。)
关于ios - 用 XIB 替换 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062716/