2011-05-15 41 views
1

UIPickerView有兩行。試圖在NSUserDefaults中保存每行的值。之前沒有使用NSUserDefaults。這裏是我的代碼:無法在NSUserDefaults中保存UIPickerView值

-(void)viewWillAppear: (BOOL) animated { 
    NSUserDefaults *defaultsPicker = [NSUserDefaults standardUserDefaults]; 
    picker = [defaultsPicker objectForKey:@"picker"] ; 
} 

- (void)viewDidLoad { 

    NSArray *ar1 = [NSArray array]; 
    for (int i = 150; i <= 210; i++) 
     ar1 = [ar1 arrayByAddingObject:[NSString stringWithFormat:@"%d",i]]; 
    [ar1 retain]; 
    self.array1 = ar1; 

    NSArray *ar2 = [NSArray array]; 
    for (int j = 40; j <= 130; j++) 
     ar2 = [ar2 arrayByAddingObject:[NSString stringWithFormat:@"%d",j]]; 
    [ar2 retain]; 
    self.array2 = ar2; 


    [super viewDidLoad]; 

} 

而NSUserDefaults的是IBAction爲

-(IBAction)calculate { 
    NSUserDefaults *defaultsPicker = [NSUserDefaults standardUserDefaults]; 
    [defaultsPicker setObject:[NSNumber numberWithInt:[picker selectedRowInComponent:0 ]] forKey:@"picker"]; 
    [defaultsPicker synchronize]; 

    //bla bla 
} 

當我按下按鈕,應用程序崩潰和日誌:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber selectedRowInComponent:]: unrecognized selector sent to instance 0x690df40' 

UPDATE

#pragma mark - 
#pragma mark Picker Data Source Methods 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 
- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component { 
    if (component == secondArrayComponent) { 
     return [self.array2 count]; 
    }else { 
     return [self.array1 count]; 
    } 
} 


#pragma mark Picker Delegate Methods 
- (NSString *)pickerView:(UIPickerView *)pickerView 
      titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if (component == secondArrayComponent) { 
     return [self.array2 objectAtIndex:row]; 
    }else { 
     return [self.array1 objectAtIndex:row]; 
    } 
} 

回答

2

在你- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 委託方法添加以下代碼,它應該保存到NSUserDefaults的

UPDATE

#pragma mark - 
#pragma mark Picker Data Source Methods 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 
- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component { 
    if (component == secondArrayComponent) { 
     return [self.array2 count]; 
    }else { 
     return [self.array1 count]; 
    } 
} 


#pragma mark Picker Delegate Methods 
- (NSString *)pickerView:(UIPickerView *)pickerView 
      titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if (component == secondArrayComponent) { 
     return [self.array2 objectAtIndex:row]; 
    }else { 
     return [self.array1 objectAtIndex:row]; 
    } 
} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {  
    NSInteger selectedRow = [thePickerView selectedRowInComponent:0]; 
    [[NSUserDefaults standardUserDefaults] setInteger:selectedRow forKey:@"picker"]; 
} 

只要你確保你已經設置你的UIPickerView的委託作爲「自我」這應該做界面構建器或在您的代碼中。此外,在您的.h文件中請確保您有<UIPickerViewDelegate>

更新2 要檢查您是否NSUserDefaults的保存使用這段代碼在 - 你的選擇

NSInteger pickerRow = [[NSUserDefaults standardUserDefaults] integerForKey:@"picker"]; 
NSLog(@"%i", pickerRow); 
+0

,我需要的(IBAction爲)放下它,你能幫忙嗎?我更新了我的問題。 – 2011-05-15 16:33:13

+0

好了編輯。你應該能夠複製和粘貼,它應該工作 – shabbirv 2011-05-15 17:01:34

+0

不起作用。我需要我的舊代碼在viewDidLoad和 - (IBAction)計算? – 2011-05-15 18:36:33