2015-04-19 3 views
0

Я запрашиваю класс Parse для имени пользователя текущего пользователя. Столбец класса называется Attendants, и массив определенно содержит имя пользователя. Когда код запускается, таблица не заполняется и ошибки не генерируются.

Кто-нибудь сможет указать, что я делаю неправильно?
Необходимый код показан ниже:
Запрос массива для заполнения табличного представления в Swift с использованием Parse

class EventsViewController: PFQueryTableViewController{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // 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 = "Event" 
     self.textKey = "username" 
     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: "Event") 
     var tempname = PFUser.currentUser().username 
     NSLog(tempname) 

     query.whereKey("Attendants", equalTo: tempname) 
     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! PFTableViewCell! 
     if cell == nil { 
      cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 
      cell.selectionStyle = UITableViewCellSelectionStyle.None 
     } 

     // Extract values from the PFObject to display in the table cell 
     cell?.textLabel?.text = object["EventName"] as! String! 
     cell?.detailTextLabel?.text = object["EventName"] as! String! 
      cell.selectionStyle = UITableViewCellSelectionStyle.None 
     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! EventDetailViewController 

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

    override func viewDidAppear(animated: Bool) { 

     // Refresh the table to ensure any data changes are displayed 
     tableView.reloadData() 
    } 
    } 
+0

Я не вижу, где вы вызываете функцию запроса ... – Volker

+0

Я не вижу 'numberOfRowsInSection', он возвращает правильное количество ячеек? –

+0

Какой из ваших методов называется? Вы реализовали метод загрузки объектов, чтобы узнать, какие результаты возвращает запрос? – Wain

ответ

0

Все, что вам нужно сделать, это написать функцию queryForTable(). Все ваши функции tableView никогда не вызываются. Так что-то об этом было бы решение:

class EventsViewController: PFQueryTableViewController { 

    override init(style: UITableViewStyle, className: String?) { 
    super.init(style: style, className: className) 
    self.textKey = "YOUR_PARSE_COLOMN_YOU_WANT_TO_SHOW" 
    self.pullToRefreshEnabled = true 
    self.paginationEnabled = false 
} 

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

override func queryForTable() -> PFQuery { 
    var query = PFQuery(className: "Event") 
    var tempname = PFUser.currentUser()!.username 
    NSLog(tempname!) 
    // This is really ugly.. Please do this via Pointer and not via String. 
    query.whereKey("Attendants", equalTo: tempname!) 
    return query 
} 
} 

Если вы хотите использовать собственные клетки, вам нужно создать свой собственный TableViewController и реализовать логику на самой TableViewController.

Этот код проверяется в Xcode 6.3 (скор 1,2)

Пожалуйста, имейте в виду, что вы должны инициализировать tableViewController из кода, как:

var eventsvc = EventsViewController(style: .Plain, className: "Event") 

представить его вид из диспетчера разрешений:

self.presentViewController(eventsvc, animated: true, completion: nil) 

Если вы хотите использовать это в истории board see this

+0

Спасибо за это, отлично работал. Однако я решил не использовать PFTable, вместо этого я буду использовать обычный UITableViewController. Еще одна проблема, но спасибо за помощь! –