使用Parse查询数组以在Swift中填充表视图

时间:2015-04-19 20:09:21

标签: ios swift parse-platform

我正在查询当前用户的用户名的Parse类。 class列名为 Attendants ,数组肯定包含用户名。运行代码时,不会填充表,也不会抛出任何错误。

有人能够指出我做错了什么吗? 必要的代码如下所示:

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

1 个答案:

答案 0 :(得分: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(swift 1.2)

中进行测试

请记住,您需要从代码中初始化tableViewController,例如:

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

将它从viewcontroller中呈现出来:

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

如果您想在故事板see this

中使用它