0

我有一个类类别,它向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上发布了我使用它的目的。

4

1 回答 1

0

发生该错误是因为您的 nib 试图将值设置到没有 name 属性的类的实例上basicPicker。这确实表明您正在向错误类型的对象发送消息。

您需要将File's Ownernib 文件中的类设置为您创建的新 UIViewController 子类,而不仅仅是默认的 UIViewController。在您的笔尖中选择File's Owner,您可以在右侧面板“实用程序”第三个选项卡中更改它,在 Xcode 中名为Identity Inspector,就在顶部。

于 2012-08-12T22:32:45.757 回答