我有一个类类别,它向UIViewController
. 我需要在类别中添加一些实例变量,所以我把它变成了一个自定义UIViewController
子类,并添加了实例变量。然后我将UIViewController
我正在显示的内容转换为新子类的一个实例。
现在,当应用程序加载时,我无法加载新UIViewController
的。我从我的笔尖加载视图控制器AppDelegate
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible]; //Crashes Here
return YES;
}
makeKeyAndVisible
这样做之后,当我调用我的应用程序窗口时会引发异常:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[<ATFIPresentationViewController 0x6c497d0> setValue:forUndefinedKey:]:
this class is not key value coding-compliant for the key basicPicker.'
basicPicker 是一个IBOutlet
到一个UITextField
. 这发生IBOutlet
在我在 viewController 中定义的每一个。为什么要让我的 viewController 成为我的子类的子类UIViewController
,以防止从我的笔尖加载任何东西?nib 中的“文件所有者”是 ViewController,而不是ATFIPresentationViewController
.
编辑:好吧,我厌倦了试图让它以“正确”的方式工作,并且减少打字繁重的方式。我通过将扩展转换为 NSObject 并将 UIViewController 传递给它来使其工作。如果有人想看看,我在gitHub上发布了我使用它的目的。