I'm trying to use the following code to push a new view controller on the stack:
RootViewController *childViewController = [[RootViewController alloc] init];
// initialize childViewController fields
[self.navigationController pushViewController:childViewController animated:YES];
When I do this I get the following crash. Can someone please help me figure out why?
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 1'
*** Call stack at first throw:
(
0 CoreFoundation 0x00db0be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f055c2 objc_exception_throw + 47
2 CoreFoundation 0x00daa7f1 -[__NSArrayM insertObject:atIndex:] + 225
3 CoreFoundation 0x00da5c44 -[__NSArrayM addObject:] + 68
4 UIKit 0x003123fd -[UINavigationBar pushNavigationItem:] + 210
5 UIKit 0x00312947 -[UINavigationBar _pushNavigationItem:transition:] + 124
6 UIKit 0x003778f0 -[UINavigationController pushViewController:transi开发者_运维技巧tion:forceImmediate:] + 1110
7 UIKit 0x003704a0 -[UINavigationController pushViewController:animated:] + 62
...
The problem is that the UINavigationItem is nil for that controller. I had the same exact crash and it was because I was returning a custom navigation item that had not yet been set. I solved it by returning super's navigationItem instead if it was nil:
- (UINavigationItem *) navigationItem
{
if (navItem) {
return navItem;
}
return [super navigationItem];
}
精彩评论