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 等不适用于子视图