One of the annoying things about the Xcode templates is the
long class names Xcode chooses for the default classes. While
the default class names are OK for small programs, they can become
somewhat unwieldy, and at times rather inappropriate, when the amount of
code you have increases. So, we’re going to modify the template Xcode
provides before we add our own code, using a process known as refactoring the code.Why are we doing this refactoring? Well, later in the chapter we’re
going to be using more than one view controller inside the project. The
original name of the default view controller created by the Xcode template
would be somewhat misleading. In addition to changing its name to
something that reflects its purpose, we will shorten the CityGuideAppDelegate
name.
Open the CityGuideAppDelegate.h file,
right-click on the CityGuideAppDelegate
class name in the interface declaration, and select Refactor, as shown in
Figure 1. This will
bring up the Refactoring window. Let’s change the name of the main
application delegate class from CityGuideAppDelegate to CityGuideDelegate.
Note: Since Objective-C does not have namespaces, it’s a common practice
to prefix your class names with initials to avoid namespace collision, or the situation
where two classes have the same name but do different things. For
instance, the Apple classes have the prefix NS for historical reasons, as Cocoa was based
on the NeXTSTEP frameworks.
Entering the new class name and clicking Preview, as I’ve done in
Figure 2, shows us that three files will be
affected by the change. Click Apply and Xcode will propagate the changes
throughout the project. Remember to save the affected files before you
refactor the next set of classes.
Note: If you find that the File→Save
menu is grayed out in Xcode, click on the file you want to save and then
click somewhere inside the file (it doesn’t matter where). Then you’ll
be able to save the file.
You should also change the name of the CityGuideViewController
class. Open the CityGuideViewController.h file and
right-click on the CityGuideViewControllerCityGuideViewController to
RootController. Entering the new class name and clicking Preview shows that
this change is more extensive, with six files being affected by the
change. Click Apply, and the changes will again propagate throughout the
project. class name in the
interface declaration, and again choose to refactor. Let’s change this
class from
Notice, however, that Xcode has not changed the
CityGuideViewController.xib file to be more appropriately named
RootController.xib. We’ll have to make this change by
hand. Click once on this file in the Groups & Files pane, wait a
second, and click it again. You can then rename it to
RootController.xib.
Unfortunately, since you had to make this change by hand, it hasn’t
been propagated throughout the project. You’ll have to make some more
manual changes. Double-click on the MainWindow.xib
file to open it in Interface Builder. Click on the Root Controller icon in
the main NIB window and open the Attribute pane of the Inspector window.
As you can see in Figure 3, the NIB name
associated with the root controller is still set as CityGuideViewController. Set this to RootController. You can either type the name of
the controller into the window and Xcode will automatically perform name
completion as you type, or use the control on the righthand side of the
text entry box to get a drop-down panel where you’ll find the RootController class listed. Remember to save
the NIB file using ⌘-S, and then test your refactoring by clicking the
Build and Run (or depending on your Xcode setup, the Build and Debug)
button in Xcode’s menu bar. You should see a bland gray screen pop up to
prove that all is well.