2011-05-15 78 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