All,
In Apple’s sample code “DateCell”
http://developer.apple.com/library/ios/#samplecode/DateCell/Introduction/Intro.html
the ivar “pickerView” is declared in MyTableViewController.h like this:
@interface MyTableViewController : UITableViewController
{
@private
UIDatePicker *pickerView;
UIBarButtonItem *doneButton; // this button appears only when the date picker is open
NSArray *dataArray;
NSDateFormatter *dateFormatter;
}
@property (nonatomic, retain) IBOutlet UIDatePicker *pickerView;
...
It is synthesized in the class file MyTableViewController.m like this:
@implementation MyTableViewController
@synthesize pickerView, doneButton, dataArray, dateFormatter;
...
When this app runs, I can insert NSLog(@"%@",pickerView) into ViewDidLoad and see that, sure enough, the ivar pickerView is real and has a value. Nowhere, though, does this class alloc/init pickerView. And that’s the root of the question: how’s it getting done if it’s not being done explicitly?
Well, I naively copied this stuff to my code into my RootViewController.h and .m files figuring I could do the same, but pickerView stubbornly remains uninitialized (and my NSLog calls return “(nil)” as its value) no matter what I try short of explicitly alloc/initing it. Certainly RootViewController is being instantiated, or the RootView wouldn’t be showing up, right? So shouldn’t my pickerView be coming along for the ride just as it does for Apple?
So… do I have to manually alloc/init the pickerView instance variable? If so, where’s Apple doing it? Or how are they doing it somehow otherwise?
I think I’m missing something very basic here, but I have no idea what it is. I can’t see anything in Interface Builder or XCode that looks different between mine and theirs, but I’ve got tunnel vision at this point and can’t see anything clearly anymore.
Thanks,
Bill
The IBOutlet modifier on this line is the key…
IBOutlet is a decorator that indicates that the object will be hooked up/connected/initialised when the corresponding xib (Interface Builder) file is loaded. The sample application you’re looking up will contain a UITableViewController is a xib which has a connection to a UIPickerView.
You can either go the route of creating your own custom xib file and wire to an instance of UIPickerView or you can manually initialise the picker yourself.