3

如何用 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];
4

2 回答 2

7

不要在主界面字段中添加任何内容。相反,在应用程序委托的 didFinishLaunchingWithOptions: 方法中加载您的顶级控制器并在那里设置窗口的根控制器。

应用程序启动假定那里提到的 xib 有一个文件所有者,它是一个 UIApplication。(以前的旧模板和一些示例项目仍然这样做。)

于 2012-04-08T13:12:14.443 回答
0

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

我可以想到可能发生这种情况的两个原因:

  • 您没有为您的 ViewController 或 XIB 中的其他对象设置正确的类(在“身份检查器”中)
  • 您没有正确接线连接。(在“连接检查器”中)

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

于 2012-04-08T13:14:27.857 回答