You now have a fully functional new style preferences window.
There are a few more tips and techniques that you might find useful.
Accessing Preferences "Directly"
In many cases, you will not need to have your
PreferencePaneController subclass mediate changes to the preferences values--in these cases, you can add an
NSObjectController instance from the palette to the Instances pane of your preference pane's nib file, binding its
contentObject to the File's Owner, with Model Key Path "controller."
Your preferences controls can then be bound directly to methods in the underlying controller object (in this example,
Adding Help to Your Preferences Panes
In the preference pane's Info.plist file, there is an optional
helpAnchor key (you may also remember from part one that we defined some help related methods in
If set, the value for this key should be a help anchor--a reference to a defined page or location in an Apple Help Book.
If you add a help button to your preference pane's custom view, and connect the button action to the
showHelp: method of the File's Owner (i.e. the
NPEPreferencePaneController subclass), then the help button will open the Application's Apple Help, and jump to the named anchor.
Setting the help anchor will also cause any alerts displayed by
showWarningAlert to display a help button, which will direct users to the same help anchor.
Optimizing Code Size
In our example application, NPEPreferencePaneController.m is included in all three targets (the application, and the two preferences panes). This means that object code for this class will be included three times, increasing the size of the final application.
In our example this, is not such a big deal (the binary code for
NPEPreferencePaneController is only 25k in size), but in a real-world application, there may be other common code, which can swell the final application size considerably.
You can eliminate this redundancy by creating a new Target, of the type Framework, in your project. All of the common code that is required by two or more preference panes can be added to this new target, and removed from all of the other targets. In the build properties for your new target, you will need to set the
Installation Directory setting to
You should add the new target to the dependencies of your main target, and each preference pane target. You also need to add the target's product (the framework) to the "Link Binaries with Libraries" build phase of the main application target, and to a new Copy Files build phase in the main application target, with a destination of
In part one of this article, I showed you how to set up the scaffolding for your new style preferences window. In this part, we covered the actual creation of the preference panes themselves.
The techniques shown here add a few useful interface tweaks, to make your windows more like Apple's, and reduce the amount of code that you need to write to make use of
Return to the Mac DevCenter
displaying as a drop down panel
2008-03-05 13:22:25 MicahWalter [View]