微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决根据用户选择将 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 举报,一经查实,本站将立刻删除。