在Swift中从Parse中检索对象数据
我已经在Parse中build立了一个小testing数据库,你可以在下面看到:
有一个国家的“ 名称 ”,国家的“ 代码 ”和国家的“ 货币 ”
所以应用程序的主要内容是这样的:
- 在第一个屏幕上,有一个文本框,如果他们按下,它将把它们带到一个tableview控制器,并从Parse国家列表中填充(你在上面看到的6个 – 这一切都很好)
- 当他们select一个国家时,它将把他们带回第一个VC并将国家保存到一个Stringtypes的variables中。 被称为' countryChosen '(这工作正常)
- 当他们按下确认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"] } }