Добавление подкласса UIViewController с помощью IBOutlet

#iphone

#iPhone

Вопрос:

Я уже видел этот пример на веб-сайте Apple раньше, но по какой-то причине я не могу его найти и занимаюсь brainfarting. Я создал файл TestViewController.h и .m, который является подклассом из UIViewController и имеет .xib. В TestAppDelegate.h у меня есть:

 @interface TestAppDelegate : NSObject <UIApplicationDelegate> {

    TestViewController *rootController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestViewController *rootController;
  

в TestAppDelegate.m у меня есть:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [self.window addSubview:rootController.view];
    [self.window makeKeyAndVisible];
    return YES;
}
  

Затем в моем MainWindow.xib я перетаскиваю ViewController, меняю класс на TestViewController, управляю перетаскиванием выхода из TestAppDelegate в TestViewController. Он создается нормально, но когда я запускаю его, я получаю:

 *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<TestViewController 0x4d06570> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'
  

Я не могу вспомнить, чего мне не хватает в этих шагах. Будем признательны за любую помощь. Спасибо.

Комментарии:

1. Проверьте класс еще раз в указателе, чтобы увидеть, является ли класс TestViewController в инспекторе атрибутов..

Ответ №1:

 @interface TestAppDelegate : NSObject <UIApplicationDelegate> {

TestViewController *rootController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestViewController *rootController;
  

в TestAppDelegate.m у меня есть:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[self.window addSubview:rootController.view];
[self.window makeKeyAndVisible];
return YES;
}
  

ЕСЛИ ЭТО ТОТ КОД, КОТОРЫЙ вы ДЕЙСТВИТЕЛЬНО ИСПОЛЬЗУЕТЕ, ДОБАВЬТЕ СЛЕДУЮЩУЮ СТРОКУ В СВОЙ ИНТЕРФЕЙС:

 UIWindow *window;
  

И ПРОВЕРЬТЕ, ПОМОГАЕТ ЛИ ЭТО.

Ответ №2:

Для вашего окна вам необходимо настроить RootViewController. Кстати, ваше название «RootController» вводит в заблуждение, b / c UIWindow имеет свойство RootViewController. Итак, чтобы заставить это работать вместо строки [self.window addSubview:rootController.view]; , вы должны сделать это self.window.rootViewController = self.rootController;

Если вы хотите сравнить свой код с рабочим кодом, просто создайте новый проект из шаблона. Выберите приложение на основе представления, в нем есть схема, которую вы ищете.

Ответ №3:

Откройте TestViewController.xib и проверьте, подключены ли там какие-либо ложные выходы. Выберите владельца файла и перейдите в инспектор подключений. Ложные выходы будут отображаться блеклыми.. В этом случае это будет label

Ответ №4:

Проверьте свои выходы в Interface Builder, у вас есть что-то с именем «label», которое не существует. Удалите ссылку на это, и все будет готово.

Ответ №5:

снова проверка….

используйте инспектор соединений и напишите имя и класс кончика name….in контроллер основного вида.Xib