Search code examples
objective-ciosplistuipicker

UIPicker accessing items from a plist


I have a plist that is being loaded into a UIPickerView. I can access the array info and have it loaded into the picker in one of the components. What I'm trying to do is to access Item 0 or Item 1 and have them displayed on a UILabel based on a condition.

I can't figure out how to access Item 0 or Item 1 (the string values). Any tips on how I'd go about doing this? thanks for the help.

here's an image to clarify what I'm talking about:

enter image description here


Solution

  • pickerViewcontroller.h

    #import <UIKit/UIKit.h>
    #define kStateComponent 0
    #define kZipComponent 1
    
        @interface PickerViewController : UIViewController
        <UIPickerViewDataSource,UIPickerViewDelegate>{
            IBOutlet UIPickerView *dpicker;
            NSDictionary *stateZip;
            NSArray *states;
            NSArray *zips;
    
        }
        @property (nonatomic,retain) UIPickerView *dpicker;
        @property (nonatomic,retain) NSDictionary *stateZip;
        @property (nonatomic, retain) NSArray *states;
        @property (nonatomic, retain) NSArray *zips;
        @end
    

    pickerViewcontroller.m

    #import "PickerViewController.h"
    
    
    @implementation PickerViewController
    @synthesize dpicker;                  
    @synthesize stateZip;
    @synthesize states;
    @synthesize zips;
    
    
    -(void) viewDidLoad{
    
        NSBundle *bundle = [NSBundle mainBundle];
    
        NSString *plistPath =[bundle pathForResource:@"plistfilename" ofType:@"plist"];
    
        NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
        self.stateZip=dictionary;
        [dictionary release];
    
    
        NSArray *component = [self.stateZip allKeys];
        NSArray *sorted =[component sortedArrayUsingSelector:@selector(compare:)];
        self.states=sorted;
    
    
                NSString *selectedState = [self.states objectAtIndex:0];
            NSArray *array = [stateZip objectForKey:selectedState];
        self.zips = array;
    
    
    }
    
    
    
    
    #pragma mark -
    #pragma mark Memory management
    
    - (void)didReceiveMemoryWarning {
        // Releases the view if it doesn't have a superview.
        [super didReceiveMemoryWarning];
    
        // Relinquish ownership any cached data, images, etc that aren't in use.
    }
    
    - (void)viewDidUnload {
        // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
        // For example: self.myOutlet = nil;
    }
    
    - (void)dealloc {
        [dpicker release];
        [stateZip release];
        [states release];
        [zips release];
        [super dealloc];
    }
    #pragma mark-
    #pragma mark picker Data Source Methods
    -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerview
    {
        return 2;
    }
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    {
        if (component == kStateComponent)
    
            return [self.states count];
    
        return [self.zips count];
    }
    #pragma mark picker delegate Methods
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
               forComponent:(NSInteger)component
    {
    
    
        if(component == kStateComponent)
    
            return[self.states objectAtIndex:row];
    
    
    
        return [self.zips objectAtIndex:row];
    
    }
    -(void)pickerView:(UIPickerView *)pickerView  didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
            if(component == kStateComponent)
        {
    
            NSString *selectedState = [self.states objectAtIndex:row];
            NSArray *array=[stateZip objectForKey:selectedState];
            self.zips=array;
            [dpicker selectRow:0 inComponent:kZipComponent animated:YES];
            [dpicker reloadComponent:kZipComponent];
        }
    }
    
    
    @endhere