在Swift中从Parse中检索对象数据

我已经在Parse中build立了一个小testing数据库,你可以在下面看到:

在这里输入图像说明 有一个国家的“ 名称 ”,国家的“ 代码 ”和国家的“ 货币

所以应用程序的主要内容是这样的:

  1. 在第一个屏幕上,有一个文本框,如果他们按下,它将把它们带到一个tableview控制器,并从Parse国家列表中填充(你在上面看到的6个 – 这一切都很好)
  2. 当他们select一个国家时,它将把他们带回第一个VC并将国家保存到一个Stringtypes的variables中。 被称为' countryChosen '(这工作正常)
  3. 当他们按下确认button时,它将把它们带到一个ResultsVC。 它有三个标签,一个用于在tableView中select的国家名称,一个用于“代码”,另一个用于所选国家的“货币”。 请参阅下面的布局:

在这里输入图像说明

在这个屏幕上,目前,我已经更新了与国名没有问题的顶部标签。 我用这个代码:

import UIKit import Parse class ResultsViewController: UIViewController { @IBOutlet weak var countryChosenLabel: UILabel! @IBOutlet weak var countryCodeLabel: UILabel! @IBOutlet weak var countryCurrencyLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() countryChosenLabel.text = countryChosen } 

我正在努力

我需要用来自Parse的正确数据填充其他2个标签。 例如,如果用户select英国国家,那么当他们到达ResultsVC时,可以显示:英国,英国,英国。

我不知道如何让查询parsing来询问这些信息。 我很新,使用parsing所以任何帮助将真正帮助!

非常感谢。

从我的TableViewController.swift 更新代码

 import UIKit import Parse class TableViewController: UITableViewController { var country = [String]() var pickedCountry: String? override func viewDidLoad() { super.viewDidLoad() var countryQuery = PFQuery(className: "country") countryQuery.orderByAscending("name") countryQuery.findObjectsInBackgroundWithBlock { (countryName:[AnyObject]?, error: NSError?) -> Void in if error == nil { for name in countryName! { self.country.append(name["name"] as! String) } self.tableView.reloadData() } else { print(error) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return country.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) cell.textLabel!.text = country[indexPath.row] return cell } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "pickedCountry" { let cell = sender as! UITableViewCell let index = tableView.indexPathForCell(cell) if let indexPath = index?.row { pickedCountry = country[indexPath] } } } } 

第一个ViewController.swift

 import UIKit import Parse var countryChosen: String! class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textfield: UITextField! @IBOutlet weak var button: UIButton! @IBAction func TFPressed(sender: AnyObject) { performSegueWithIdentifier("toTable", sender: self) } @IBAction func buttonPressed(sender: AnyObject) { if textfield.text != nil { performSegueWithIdentifier("done", sender: self) } countryChosen = textfield.text! print(countryChosen) } @IBAction func selectedCountry (segue: UIStoryboardSegue) { let countryTableViewController = segue.sourceViewController as! TableViewController if let selectedCountry = countryTableViewController.pickedCountry { textfield.text = selectedCountry } } } 

第一步是保留您检索的PFObjects ,而不是简单地提取国家名称并丢弃对象,因为稍后您将需要它。

 import UIKit import Parse class TableViewController: UITableViewController { var country = [PFObject]() var pickedCountry: PFObject? override func viewDidLoad() { super.viewDidLoad() var countryQuery = PFQuery(className: "country") countryQuery.orderByAscending("name") countryQuery.findObjectsInBackgroundWithBlock { (countries:[AnyObject]?, error: NSError?) -> Void in if error == nil { self.country=countries as! [PFObject] self.tableView.reloadData() } else { print(error) } } } 

这意味着你将需要改变你访问data- cellForRowAtIndexPath

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) let rowCountry = country[indexPath.row] cell.textLabel!.text = rowCountry["name"] return cell } 

现在在你原来的视图控制器,当你访问的pickedCountry它将是一个PFObject ,你可以访问各个领域 –

 import UIKit import Parse class ResultsViewController: UIViewController { @IBOutlet weak var countryChosenLabel: UILabel! @IBOutlet weak var countryCodeLabel: UILabel! @IBOutlet weak var countryCurrencyLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() countryChosenLabel.text = countryChosen["name"] countryCodeLabel.text = countryChosen["code"] countryCurrencyLabel.text = countryChosen["currency"] } 

您需要在第一个视图控制器中进行类似的更改 – 将stringvariables更改为PFObject并访问国家/地区名称字段

 import UIKit import Parse var countryChosen: PFObject! @IBAction func buttonPressed(sender: AnyObject) { if textfield.text != nil { performSegueWithIdentifier("done", sender: self) } // countryChosen = textfield.text! // You can't do this any more because you need a PFObject, not text. I am not sure you would want to anyway, because they may have typed an invalid country. Probably use a label instead of a text field print(countryChosen) } @IBAction func selectedCountry (segue: UIStoryboardSegue) { let countryTableViewController = segue.sourceViewController as! TableViewController if let selectedCountry = countryTableViewController.pickedCountry { textfield.text = selectedCountry["name"] } }