Right now, I am setting the title in the viewDidLoad of the root view of the tab, which only changes when I click on the tab. I want this to be set before I select the tab. I tried something like:
[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string";
in the first view that loads in another tab, but there is clearly something wrong since I get a left operand error.
What is the correct way to achieve what I am trying to do?
Try setting the title in awakeFromNib instead of viewDidLoad. The view for a view controller is not actually loaded until you need the view, and the tab bar controller by default doesn’t access the view of a view controller until you actually select it (which is why you saw the title change when you selected the tab).
Since the nib is creating the view controller to start with (assuming you have built your tab bar controller in IB) awakeFromNib will be called as soon as the view controller has been built, before the tab bar controller can ask what the title is.