PFQueryTableView queryForTable(),如何不返回任何内容?

时间:2015-12-07 02:31:39

标签: ios parse-platform pfuser pfquerytableviewcontrolle

我刚开始使用Parse并且有时会遇到一些问题。我有一个PFQueryTableView,它在用户登录时非常有效.queryForTable()函数在“createdBy”列中查询所有具有当前用户用户名的对象。但如果没有用户登录,那么我该返回什么?目前我有这样的,它有效,但在日志中出错。用户登录后,您必须拉动刷新表,然后显示用户事件。当没有用户登录时我想要一个空表,并且在用户登录并且loginView消失后,该表应该自动加载用户数据。这是我的viewDidAppear和我的queryForTable函数:

override func viewDidAppear(animated: Bool) {

    if PFUser.currentUser() == nil {
        let loginView = PFLogInViewController()
        loginView.delegate = self
        self.presentViewController(loginView, animated: true, completion: nil)



    }

}


override func queryForTable() -> PFQuery {

    if PFUser.currentUser() != nil{

            let query = PFQuery(className: "calendarEvents")
            query.cachePolicy = .CacheElseNetwork
            query.orderByAscending("StartDate")
            query.whereKey("createdBy", equalTo: (PFUser.currentUser()?.username)!)
            return query
   }else{
        let noQuery = PFQuery()

        return noQuery
    }


}

1 个答案:

答案 0 :(得分:0)

您选择的方法很好。更常见的方法是在应用程序拥有用户之前不提供此VC。您还可以将所有用户添加到某个角色,然后保护您的" calendarEvents"具有引用该角色的CLP的类。

查询的另一个想法是添加一个保证空结果的限定符,例如......

override func queryForTable() -> PFQuery {
    let query = PFQuery(className: "calendarEvents")
    query.cachePolicy = .CacheElseNetwork
    query.orderByAscending("StartDate")
    query.whereKey("createdBy", equalTo: (PFUser.currentUser()?.username)!)

    if PFUser.currentUser() == nil {
        query.whereKey("createdAt", greaterThan: NSDate.distantFuture())  // return objects created after the universe has collapsed
    }
    return query
}