Xibファイル使い方見直し
iOS7からアプリ作成に手を出した自分は、storyboardばかりで今までXibファイルは使わずに作成していました。
ただ、それだけではUIWindowレベルから弄る際に支障をきたしてしまった為、Xibを使うことになり、その際に問題が出たのでメモしておきます。
pushする場合
他画面から、Xibを使用したコントローラに遷移する際、最初は以下のようにやっていました。
ViewController* viewController = [[ViewController alloc] initWithNibName:@"NibFileName" bundle:nil]; [self.navigationController pushViewController:viewController animated:YES];
ただこれでは上手く行かず、以下のように修正することで上手くいきました。ただ単に読んだcontroller側のinitでNibファイルを呼ぶようにしただけです。
ViewController* viewController = [[ViewController alloc] init]; [self.navigationController pushViewController:viewController animated:YES];
ViewController.m
-(id)init { self = [super initWithNibName:@"NibFileName" bundle:nil]; return self; }
deallocateエラー
また、別件で、XibにしてからscrollViewDidScroll message sent to deallocated instanceというエラーが出ていたので、以下のように修正したら、エラーがなくなって問題なく動くようになりました。
- (void)back:(id)sender { view.delegate = nil; [self.navigationController popViewControllerAnimated:YES]; }
参照:UICollectionView calling scrollViewDidScroll: when popped from the navigation stack
Xib使い慣れなくて、意外と大変です。。storyboardで呼ぶ際と、結構違いがあるのが大変ですね。。