用 XIB 替换情节提要

Posted

技术标签:

【中文标题】用 XIB 替换情节提要【英文标题】:Replacing storyboard with XIB 【发布时间】:2012-04-08 12:16:10 【问题描述】:

如何?

在尝试创建动态视图及其控制器时,我失去了新故事板的所有优势。现在,当试图从项目中删除它时,我创建了一个带有自己的控制器的新 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];

【问题讨论】:

附注一下,为了将来的兼容性,您不应以UINS 开头自己的类名(想象一下,在SDK 的未来版本中,Apple 引入了一个名为UIRootWindow)。使用你自己的前缀,这样你就会有URKRootWindow这样的东西。 【参考方案1】:

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

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

【讨论】:

谢谢。它确实奏效了。虽然,我附加窗口的方式似乎不是最佳的。有没有更好的方法来做到这一点? 我建议使用单视图控制器模板(没有情节提要)创建一个全新的测试应用程序,并查看他们如何在应用程序委托中进行设置。基本上,您希望将您的第一个控制器(或其包含的控制器,如果有的话)分配给委托的window.rootViewController 谢谢。这肯定回答了我的问题。应该自己考虑一下。【参考方案2】:

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

我能想到这可能发生的两个原因:

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

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

【讨论】:

以上是关于用 XIB 替换情节提要的主要内容,如果未能解决你的问题,请参考以下文章

快照套件。替换情节提要约束

使用没有外部 xib 的情节提要添加子视图

OSX / macOS - 如何将 xib 迁移到情节提要

在情节提要中调用 xib

XIB 到情节提要

从 Table View Cell xib 与披露指示符转至情节提要