Just curious, why setting self.navigationItem = ... works, but self.navigationController.navigationItem fails? The same applies for self.tool
although set can set this property of a navigation controller: self.navigationController.navigationItem = .. but it won't work.
Mainly because the navigationItem is a UIViewController's property. You can access the property because UINavigationController is inherited from UIViewController. this property is meant for any view controller that is added into a navigation controller to have a navigation bar created for them. Normally a UINavigationController won't be put into another navigation controller, so set this property of a navigation controller normally makes no sense.