2015-07-20 3 views
0

пытается получить от моего UITableViewController до контроллера подробного представления с этими PFObjects ... спасибо заранее!Подготовьтесь к segue .. от UITableView до DetailView с элементами parse

ошибки я не могу смириться ... «Не могу индексировать значение типа„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 

ответ

1

вар currentObject = String() является строкой, и установить его в строку в prepareForSegue.This должен сделать трюк: self.customerTextField.text = curentObject И удалите все остальное.

+0

У меня есть все ошибки, но когда я нажимаю на ячейку, она все равно не будет выходить .... Triple проверила имя segue, удалила и переделала его в три раза, проверила имя класса контроллера представления назначения ... не уверен, что еще do..i сказал бы, что это ответ ... но его все еще не работает :( –

+0

Вы сделали segue в раскадровке? Как вы это сделали? Также, если вы используете «didSelectRowAtIndexPath», убедитесь, что это не " didDeSelectRowAtIndexPath ", это ошибка, которую часто делали. Также вам нужно« выбрать вариант »в представлении таблицы и нарисовать ее в контроллере представления как для источника данных, так и для делегата, и вам нужно реализовать делегат tableviewcontroller. Подробнее см. https://средний.com/@ ronm333/a-simple-table-view-example-in-swift-cbf9a405f975 – user1700737

+0

чувак этой статьи был потрясающим! разобрался с этой статьей! Большое спасибо за url :) –

1

Попробуйте что

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

получение той же ошибки с вашим кодом ... «не имеет имен элементов по имени» ... по какой-то причине я не могу получить доступ к объектам в моем запросе .... могу ли я вложить segue в моем запросе, чтобы он знал, какие объекты его получают? –

+0

Объекты - это массив, в котором вы сохраняете вещи, которые вы запрашиваете, из синтаксического разбора, которые вы знаете это правильно. в вашем случае это должно быть ** customerName ** или ** customAddress ** – Lamar

+0

Я обновляю код, это должно быть имя массива, в котором вы используете – Lamar

0

Я бы рекомендовал использовать PFQueryTableViewController. Это объект пользовательского интерфейса, который предоставляется Parse и быстрее загружает данные из вашего класса.

Вот пример того, как создать его:

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 
    } 
} 

В конце не забудьте также создал пользовательский класс клеток.

Смежные вопросы