保存 UIPickerView 数据以进行解析

Posted

技术标签:

【中文标题】保存 UIPickerView 数据以进行解析【英文标题】:Saving UIPickerView Data to Parse 【发布时间】:2017-01-18 19:55:31 【问题描述】:

我有一个 UIPickerView 我需要将用户选择保存到 Parse。我已经尝试了一百万种不同的东西,但它只是让我的列空白。任何想法我做错了什么?信息只是没有保存到 Parse,我知道 UIPicker 可以工作,因为标签会更新。我已经搜索了谷歌和堆栈,但看不到我的代码有什么问题?

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate 

@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var pickedLabel: UILabel!

var pickerDataSource = ["Car", "Bus", "Train", "Plane", "Boat"]

override func viewDidLoad() 
    super.viewDidLoad()
    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;


func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
    return 1


  func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    return self.pickerDataSource.count;


   func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! 
    return self.pickerDataSource[row]
  

  func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)

PFUser.currentUser()?["PickerColumn"] = self.pickerDataSource[row];
  self.pickedLabel.text = "Your choice: \(self.pickerDataSource[row])"
 PFUser.currentUser()?.saveInBackground()
 

我也试过这个:

var pickerSave: String?

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
 
 pickerSave = pickerDataSource[row]
   self.pickedLabel.text = "Your choice: \(self.pickerDataSource[row])"
  

 @IBAction func next(sender: AnyObject) 

 PFUser.currentUser()?["pickerColumn"] = pickerSave
    self.performSegueWithIdentifier("next", sender:self)
      PFUser.currentUser()?.saveInBackground()

【问题讨论】:

【参考方案1】:

如果您的标签正在更新,那么您的选择器就可以了。您发出的是 PFUser 类。 PFUser.currentUser() 是否按预期返回字典?设置“pickerColumn”后,您可以在控制台上打印出它的值吗?

做以下工作:

PFUser.currentUser()?["pickerColumn"] = "1"
PFUser.currentUser()?.saveInBackground()

那些特定的行是中断的。

【讨论】:

嗨,安德鲁,是的,选择器数据打印到日志没有问题,这就是我无法弄清楚的原因,它应该只是简单地保存要解析的文本,但事实并非如此。 ' PFUser.currentUser()?["pickerColumn"] = (pickerDataSource[row]) print(pickerDataSource[row]) ' PFUser.currentUser()?.saveInBackground()【参考方案2】:

所以看起来您正在尝试将选择器中的值保存到解析 _User 类中。无论如何,我不建议将其保存在那里。我假设您使用的是 mongoDB,这是一个模式问题。所以我要做的是创建一个新的类来存储这些数据。

我会这样声明。

var pickerData = PFObject(className:"PickerData")
@IBAction func next(sender: AnyObject) 

pickerData["user"] = PFUser.current()?
pickerData["data"] = self.pickedLabel.text
pickerData.saveInBackground()

【讨论】:

非常感谢 Jarad,我会尝试并回复您。

以上是关于保存 UIPickerView 数据以进行解析的主要内容,如果未能解决你的问题,请参考以下文章

将 json_encoded 数据解析为用于 UIPickerView 的数组 - Xcode

Swift:在国家和城市之间的两个pickerView中解析Json

在后台保存条目会导致崩溃并仍然阻塞 UI

UIPickerView 在重新加载时冻结 UI

如何在 UIPickerview 中制作用户生成的核心数据实体选项

UIPickerView 为空,数据源为 JSON 数组