【问题标题】:UIPickerView in separate view loses value单独视图中的 UIPickerView 失去价值
【发布时间】:2013-08-22 19:53:03
【问题描述】:

我有一个 UIPickerView,在单独的视图 settingsViewController 中有很多行。选择一行后,将数据通过NSUSERDEFAULTS传递给我的MainViewController。但是,如果我返回 settingsViewController 并且不更改行,按下保存按钮 - pickerView 似乎发送值“nil”?

这是 UIPickerView 的代码和传递行的代码。

//PickerViewCode
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [picker selectRow:[defaults integerForKey:@"pickerRow"] inComponent:0 animated:YES];
}

}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;

}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:  
(NSInteger)component {
{
    if ([skolor count] == 0)
        return 1;
    return [skolor count];
}}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
forComponent:(NSInteger)component {
return [skolor objectAtIndex:row];
}


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
   inComponent:(NSInteger)component {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:row forKey:@"pickerRow"];

//Passing pickerViewValue
- (IBAction)selectedRow:(id)sender {

SchoolSoftViewController2 *vc1 = [self.storyboard 
instantiateViewControllerWithIdentifier:@"webview1"];
NSString *urlString = [valdSkola absoluteString];
[[NSUserDefaults standardUserDefaults] setObject:urlString  forKey:@"UserURL"];
[self presentViewController:vc1 animated:YES completion:nil];

}

【问题讨论】:

    标签: ios objective-c uipickerview nsuserdefaults


    【解决方案1】:

    NSUserDefaults 在使用 setObject:forKey: 方法调用设置后不会立即保存信息。要强制它保存,请在将 urlString 设置为默认值之后但在呈现视图控制器之前告诉它同步。

    NSString *urlString = [valdSkola absoluteString];
    [[NSUserDefaults standardUserDefaults] setObject:urlString  forKey:@"UserURL"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self presentViewController:vc1 animated:YES completion:nil];
    

    还有你设置行的位置:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:row forKey:@"pickerRow"];
    [defaults synchronize];
    

    【讨论】:

    • 那部分已经可以了。它保存并在 mainViewController 中加载正确的值。只有当我返回 settingsViewController 并按下保存按钮而不更改值时,pickerView 仍显示相同的值,它不会加载到 mainViewController
    【解决方案2】:

    尝试设置选择器选择的值。像这样。

    int row = [pickerView selectedRowInComponent:COMPONANT_INDEX]; NSString *str = [YOUR_ARRAY objectAtIndex:row];//如果数组为空可能会崩溃

    [[NSUserDefaults standardUserDefaults] setObject:str forKey:@"UserURL"]; [[NSUserDefaults standardUserDefaults] 同步];

    在你的情况下, NSString *urlString = [valdSkola absoluteString]; // 这是返回一个 nil

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多