Проблема легко обнаруживается, но для ее решения требуется определенная работа.
Глядя на ваш код, я сразу хочу предложить добавить весь код инициализации RootView в метод loadView
вашего RootViewController. Вот где это должно быть ( смотрите здесь, почему ).
Кроме того, если вам абсолютно необходимо, чтобы ваш RootView имел ссылку назад на RootViewController, вам, вероятно, следует сделать это в viewDidLoad
. Но я бы не рекомендовал это делать.
При использовании шаблона MVC контроллер обязан инициализировать и обновлять представления. Строка self.rootViewController.rootViewLabel = testLabel;
должна быть удалена из реализации RootView. Непонятно, каково ваше намерение, но если вы хотите обновить rootViewLabel, вы должны позволить контроллеру сделать это.
Подводя итог:
// RootViewController.m
- (id)initRootViewController{
self = [super init];
if(self){
// other init code here
}
return self;
}
- (void)loadView {
RootView *rootV = [[RootView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
self.view = rootV;
[rootV release];
}
- (void)viewDidLoad {
[super viewDidLoad];
// etc...
}
// etc.
Теперь, что касается RootView, вот как это будет выглядеть:
RootView.h
#import <UIKit/UIKit.h>
@interface RootView : UIView {
UILabel *rootViewLabel;
}
// moved from RootViewController
@property (nonatomic, retain) UILabel *rootViewLabel;
@end
RootView.m
#import "RootView.h"
@implementation RootView
@synthesize rootViewLabel;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Whatever initialization code you might have
//Create the label
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100,100, 50)];
//Set the font bold
testLabel.font = [UIFont boldSystemFontOfSize:20.0];
//Set the backgroundcolor of the label to transparent
testLabel.backgroundColor = [UIColor clearColor];
//Set the text alignment of the text label to left
testLabel.textAlignment = UITextAlignmentLeft;
//Set the text color of the text label to black
testLabel.textColor = [UIColor blackColor];
testLabel.text = @"01:30";
self.rootViewLabel = testLabel;
[testLabel release];
// add rootViewLabel as a subview of your this view
[self addSubView:rootViewLabel];
}
return self;
}
- (void)dealloc
{
[rootViewLabel release];
[super dealloc];
}
@end
Надеюсь, это даст вам представление о том, как структурировать код инициализации вашего представления ...
(Отказ от ответственности, я не могу проверить этот код сейчас, пожалуйста, укажите на любые ошибки! Спасибо)