私のビュー階層は、いくつかのカスタム「ルート」UIViewControllerサブクラスにあります。ルートVCサブクラスの1つにカスタムself.viewを設定しようとしています。そこで、私はやっています:
MyRootViewController_With_Scroll.h
// Import lowest level root VC
#import "MyRootViewController.h"
// my custom scroll view I want to use as self.view
@class MyScrollView;
@interface MyRootViewController_With_Scroll : MyRootViewController {
}
@property (strong) MyScrollView *view;
@end
MyRootViewController_With_Scroll.m
#import MyRootViewController_With_Scroll.h;
@interface MyRootViewController_With_Scroll ()
@end
@implementation MyRootViewController_With_Scroll
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView
{
NSLog(@"loading view");
CGRect windowSize = [UIScreen mainScreen].applicationFrame;
MyScrollView *rootScrollView = [MyScrollView scrollerWithSize:windowSize.size];
self.view = rootScrollView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// Getter and setter for self.view
- (MyScrollView *)view
{
return (MyScrollView *)[super view];
}
- (void)setView:(MyScrollView *)view
{
[super setView:view];
}
iOS6のドキュメントによると、viewDidLoadは、アプリのライフサイクル全体でViewControllerごとに1回だけ起動することを想定しています。
私はここで何が間違っているのですか?ビューコントローラがloadView/viewDidLoadを繰り返し呼び出す原因は何ですか?不思議なことに、私のアプリの「ホーム画面」VCはビューを1回だけロードしますが、ナビゲーション階層内の後続のすべてのビューは、表示されるたびにloadViewを起動します。何が起こっている?
編集プロパティをに変更しましたstrong
。同じ問題が発生します。
編集2loadViewのオーバーライドを停止しましたが、まだ発生しています。今、私は本当に混乱しています。