queryForTable viewDidAppear,viewWillAppear等不与子视图一起使用

时间:2016-05-04 00:26:50

标签: ios swift parse-platform viewwillappear viewdidappear

我通过Cocoapods使用PageMenu,它有一个Base ViewController,而子视图则有PFQueryTableViewController,每个都是一页。

问题是,当应用程序启动并显示第一个PFQueryTVC(作为子视图)时,如果在queryForTable中有query.whereKey(...)函数,则它不会显示结果。它没有崩溃。

我也注意到viewWillAppear和viewDidAppear也没有被调用,但是如果我转到另一个页面然后回来,queryForTable就可以了,还有viewWillAppear和viewDidAppear。

以下是我的代码的一部分:

var city : String = "dallas"

class CouponsTableViewController: PFQueryTableViewController, DisplayAlert {

override init(style: UITableViewStyle, className: String?) {
    super.init(style: style, className: className)
    parseClassName = "Coupons"
    pullToRefreshEnabled = true
    paginationEnabled = true
    objectsPerPage = 25
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    parseClassName = "Coupons"
    pullToRefreshEnabled = true
    paginationEnabled = true
    objectsPerPage = 25
}

override func queryForTable() -> PFQuery {

    let subquery = PFQuery(className: self.parseClassName!)
    subquery.whereKey("city", equalTo: city) // this shows no results
    subquery.whereKey("location", nearGeoPoint: userLocation)

    let subquery2 = PFQuery(className: self.parseClassName!)
    subquery2.whereKey("city", equalTo: "all") // this shows no results
    subquery2.whereKey("location", nearGeoPoint: userLocation)
    let query = PFQuery.orQueryWithSubqueries([subquery, subquery2])
// If Pull To Refresh is enabled, query against the network by default.
    if self.pullToRefreshEnabled {

        query.cachePolicy = .NetworkOnly
    }

    // If no objects are loaded in memory, we look to the cache first to fill the table
    // and then subsequently do a query against the network.
    if self.objects!.count == 0 {
        query.cachePolicy = .CacheThenNetwork
    }

    return query
}

当我转到另一个页面然后回来时,queryForTable可以正常工作,以及viewWillAppear和viewDidAppear。

1 个答案:

答案 0 :(得分:0)

你说:

  

问题是当应用程序启动并显示第一个PFQueryTVC时   (作为子视图)如果有,则不显示结果   query.whereKey(...)函数在queryForTable中。它并没有崩溃。

但应该显示视图控制器而不是显示。如果您希望一个视图控制器包含并呈现另一个视图控制器,那么有一些机制可以做到这一点,但它不仅仅是获取视图并将其添加为子视图。请参阅View Controller Containment

但是,tableview不需要属于tableview控制器,它可以添加到任何视图控制器,只要你设置一个数据源(在很多情况下你也想设置委托)。