如何解决根据用户选择将 UIPickerView 中的数据保存在 NSUserDefaults 中,并在另一个 ViewController Objective-C 中调用
这是我的问题。 在一个 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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。