Every view controller has a navigation item. You are changing the navigation item of the navigation controller... but that will never be seen unless the navigation controller was inside another navigation controller! Instead of
self.navigationController.navigationItem.title = @"hai";
you want
self.navigationItem.title = @"hai";
or, if your navigation item's title is nil, the navigation controller will use your view controller's title:
self.title = @"hai";
You should simply set the view title, which is used by both navigation bars and tab bars, unless you want to specify a different title for each of those for some reason.