Проблема конструктора интерфейса: при подключении IBOutlet, получая «этот класс не соответствует значению ключа для кода» - PullRequest
3 голосов
/ 05 мая 2010

Вот что я делаю:

1) Создать новый подкласс UIViewController, отметьте NIB для построителя интерфейса

2) В шапке:

@interface QuizMainViewController : UIViewController 
{
    UILabel* aLabel;
} 

@property (nonatomic, retain) IBOutlet UILabel* aLabel;

@end

3) В .м

#import "QuizMainViewController.h"    

@implementation QuizMainViewController

@synthesize aLabel;

- (void)dealloc 
{
    [aLabel release];
    [super dealloc];
}

@end

4) Откройте NIB В конструкторе интерфейса перетащите новую UILabel в представление.

Я тестирую программу здесь, и она работает нормально.

5) щелкните правой кнопкой мыши на владельце файла, подключите «aLabel» из розеток к UILabel.

Я бегу сюда, и он падает. Сообщение из журнала:

*** Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа для кода aLabel. '

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Я исправил проблему!

Представление загружалось из контроллера панели вкладок, я установил имя пера «QuizMainViewController», но я не установил идентификатор класса представления как «QuizMainViewController», он застрял в значении по умолчанию "UIViewController".

Когда представление было загружено, он думал, что это экземпляр UIViewController, поэтому он не знал о свойстве aLabel.

МОРАЛЬ ИСТОРИИ. При использовании контроллера панели вкладок задайте имя пера И идентификатор класса для перьев, которые имеют собственный контроллер вида.

0 голосов
/ 05 мая 2010

Попробуйте:

@interface QuizMainViewController : UIViewController 
{
    IBOutlet UILabel* aLabel;
} 

Возможно, вам больше не нужно делать это в Objective-C 2.0, но я столкнулся с проблемами на iPhone, не обращая на это внимания.

Edit:

Вы можете попробовать изменить

@property (nonatomic, retain) IBOutlet UILabel* aLabel;

до

@property (nonatomic, retain) IBOutlet UILabel *aLabel;

Не думаю, что это должно иметь значение, однако. Компилятор обычно может решить это.

Edit01:

В IB убедитесь, что класс контроллера представления установлен на QuizManViewController, а не просто UIView.

...