queryForTable viewDidAppear、viewWillAppear 等不适用于子视图

Posted

技术标签:

【中文标题】queryForTable viewDidAppear、viewWillAppear 等不适用于子视图【英文标题】:queryForTable viewDidAppear, viewWillAppear, etc not working with subview 【发布时间】:2016-05-04 00:26:49 【问题描述】:

我通过 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】:

你说:

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

但视图控制器应该呈现而不是显示。如果您希望一个视图控制器包含并呈现另一个视图控制器,则有一些机制可以做到这一点,但这并不像获取视图并将其添加为子视图那么简单。见ViewControllerContainment

但是,tableview 不需要属于 tableview 控制器,它可以添加到任何视图控制器,前提是您设置了数据源(在许多情况下,您也需要设置委托)。

【讨论】:

以上是关于queryForTable viewDidAppear、viewWillAppear 等不适用于子视图的主要内容,如果未能解决你的问题,请参考以下文章

queryForTable viewDidAppear、viewWillAppear 等不适用于子视图

PFQueryTableViewController 带来重复的结果 - 分页

iOS 视图调用

在 PFQuery 中过滤未定义的文件

UIAlertView 灰色按钮

Swift:字典键为 CGRect