问题描述
这是我的问题。 在一个 ViewController 中,有两个 PickerView,它们具有从服务器获取的数据并显示在 PickerView 的行上。
我想要做的是将用户选择的行上显示的数据(在本例中为 int)保存在 NSUserDefaults 中,并在函数内的另一个 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
}
}