准备segue ..从UITableView到DetailView与解析对象

时间:2015-07-20 22:38:39

标签: swift uitableview parse-platform segue

试图从我的UITableViewController到这些PFObjects的详细视图控制器...提前感谢!

错误我似乎无法调和......“无法使用'String'类型的索引下标'String'类型的值”

我希望查询对象出现在详细视图控制器上......

这是我的查询和我对segue的准备......我似乎无法访问准备segue中的对象......

    var customerName = [String]()
    var customerAddress = [String]()

  var query = Pfuser.query
  query.whereKey("userId",equalTo:adminFollowingUser)
  query.findObjectsInBackgroundWithBlock({ (adminObjects, error) -> Void in

          if let objects = adminObjects {

            for object in objects {

  self.customerName.append(object["customerName"] as! String)
  self.customerAddress.append(object["customerStreetAddress"] as! String)

//这是为segue做准备......

      override func prepareForSegue(segue: UIStoryboardSegue, sender:
      AnyObject?)
      {
       if (segue.identifier == "thesePools")
      {

       let employeeDetailVC: EmployeeDetailViewController =  segue.destinationViewController
    as! EmployeeDetailViewController
  // indexPath is set to the path that was tapped


let indexPath = self.tableView.indexPathForSelectedRow

  let customerNameLabel = self.customerName[indexPath!.row]
  let customerAddressLabel = self.customerAddress[indexPath!.row]
 employeeDetailVC.customerString = customerNameLabel
  employeeDetailVC.addressString = customerAddressLabel

这是我的详细视图控制器接收字符串。

       //DetailViewController  

   var customerString = String()
   var addressString = String()

  override func viewDidLoad() {
super.viewDidLoad()

self.customerLabel.text = customerString
self.addressLabel.text = addressString

3 个答案:

答案 0 :(得分:1)

试试

    let nav = segue.destinationViewController as! CustomerDetailViewController
    var indexPath :NSIndexPath = self.tableview.indexPathForSelectedRow()!
        var object  = self.CustomerName[indexPath.row] as! String 
           nav.currentobject = object

答案 1 :(得分:1)

var currentObject = String()是一个字符串,你将它设置为prepareForSegue中的一个字符串。这应该可以解决问题: self.customerTextField.text = curentObject 并删除所有其他东西。

答案 2 :(得分:0)

我建议使用PFQueryTableViewController。 这是一个由Parse提供的UI对象,可以更快地将类中的数据加载50倍。

以下是如何创建它的示例:

    import UIKit

class YourTableViewController: PFQueryTableViewController {

// Initialise the PFQueryTable tableview
override init!(style: UITableViewStyle, className: String!) {
    super.init(style: style, className: className)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    // Configure the PFQueryTableView
    self.parseClassName = "yourClass"

    self.textKey = "yourObject"
    self.pullToRefreshEnabled = true
    self.paginationEnabled = false
}

// Define the query that will provide the data for the table view
override func queryForTable() -> PFQuery! {
    var query = PFQuery(className: "yourClass")
    query.orderByAscending("yourObject")


    return query
}

//override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject) -> PFTableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as CustomTableViewCell!
    if cell == nil {
        cell = CustomTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
    }

    // Extract values from the PFObject to display in the table cell

    cell.info.text = object["info"] as String


    // Date for cell subtitle
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let dateForText = object["date"] as NSDate
    cell.date.text = dateFormatter.stringFromDate(dateForText)

    return cell
}

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    // Get the new view controller using [segue destinationViewController].
    var detailScene = segue.destinationViewController as YourDetailViewController

    // Pass the selected object to the destination view controller.
    if let indexPath = self.tableView.indexPathForSelectedRow() {
        let row = Int(indexPath.row)
        detailScene.currentObject = objects[row] as? PFObject
    }
}

最后确保还创建了一个自定义单元格类。