いや、考えれば当たり前なんですが、眠気と闘いながら書いてたりすると、背景色とかinitで設定しちゃってたり…。
例えば以下のようにAppDelegateからViewControllerを設定しているとします。
AppDelegate.m
		
		
			
			
			
			
				
					
				| 
					
				 | 
						- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];          NSLog(@"AppDelegate - (1)");     ViewController *controller = ViewController.new;     NSLog(@"AppDelegate - (2)");     self.window.rootViewController = controller;     [self.window makeKeyAndVisible];     NSLog(@"AppDelegate - (3)");       return YES; }  | 
					
				
			 
		 
こちらが問題のないViewController。
(問題のない)ViewController.m
		
		
			
			
			
			
				
					
				| 
					
				 | 
						- (id)init {     if (self = [super init]) {         NSLog(@"ViewController - (I)");     }     return self; }   - (void)viewDidLoad {     [super viewDidLoad];     NSLog(@"ViewController - (II)"); }  | 
					
				
			 
		 
出力されるログは以下のように、(1)-(I)-(2)-(II)-(3)の順になり、想定通りです。
2014-05-17 14:46:56.865 init[1497:60b] AppDelegate – (1)
2014-05-17 14:46:56.867 init[1497:60b] ViewController – (I)
2014-05-17 14:46:56.867 init[1497:60b] AppDelegate – (2)
2014-05-17 14:46:56.868 init[1497:60b] ViewController – (II)
2014-05-17 14:46:56.870 init[1497:60b] AppDelegate – (3)
次に問題のあるViewControllerの場合。initでself.view.backgroundColorを操作しています。
(問題のある)ViewController.m
		
		
			
			
			
			
				
					
				| 
					
				 | 
						- (id)init {     if (self = [super init]) {         NSLog(@"ViewController - (I)");         self.view.backgroundColor = UIColor.grayColor;     }     return self; }   - (void)viewDidLoad {     [super viewDidLoad];     NSLog(@"ViewController - (II)"); }  | 
					
				
			 
		 
ログが(1)-(I)-(II)-(2)-(3)の順で出力され、先ほどの例と変わってしまっています。
2014-05-17 14:49:21.885 init[1516:60b] AppDelegate – (1)
2014-05-17 14:49:21.886 init[1516:60b] ViewController – (I)
2014-05-17 14:49:21.887 init[1516:60b] ViewController – (II)
2014-05-17 14:49:21.887 init[1516:60b] AppDelegate – (2)
2014-05-17 14:49:21.889 init[1516:60b] AppDelegate – (3)
これは、init内でself.viewにアクセスしたことにより、そこでviewが読み込まれてしまい、発生した差異です。
多くの場合、問題は起きないと思いますが、いざハマると解決に時間がかかりそうな気がします。
気をつけよう…。
					 
						
		
最近のコメント