根据用户选择将 UIPickerView 中的数据保存在 NSUserDefaults 中,并在另一个 ViewController Objective-C 中调用它

Save data from UIPickerView in NSUserDefaults based on user selection and call it in another ViewController Objective-C

这是我的问题。 在一个 ViewController 中有两个 PickerView,它们从服务器获取数据并显示在 pickerView 的行上。

我想做的是将用户选择的行上显示的数据保存在 NSUserDefaults 中(在本例中是一个 int),并在函数内的另一个 ViewController 中使用它。

现在我是这样保存的:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSMutableArray<Wallet *> *userWallets = [DB_SINGLETON getAllWallets];

if (pickerView.tag == 1) {
    switch (row) {
        // Select a merchant and save data in UserDefaults and call it back when I send the message in SendMsgToOperatorViewController
        case 1:
            break;
        case 2:
            [[NSUserDefaults standardUserDefaults] setInteger:userWallets[0].walletid forKey:@"merchantSelected"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            NSLog(@"");
        case 3:
            [[NSUserDefaults standardUserDefaults] setInteger:userWallets[1].walletid forKey:@"merchantSelected"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        default:
            break;
    }
} else if (pickerView.tag == 2) {
    // code
    }
}

我想根据用户选择的行将数据保存在 NSUserDefaults 中。这是正确的做法吗?

更好的解决方案是 -

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSMutableArray<Wallet *> *userWallets = [DB_SINGLETON getAllWallets];

if (pickerView.tag == 1) && row > 1 {
// Skipping first 2 rows since qustion also skips it
  [[NSUserDefaults standardUserDefaults] setInteger:userWallets[row-2].walletid forKey:@"merchantSelected"];
  [[NSUserDefaults standardUserDefaults] synchronize];
} else if (pickerView.tag == 2) {
    // code
    }
}