0

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
    }


}
4

1 に答える 1

0

あなたが選択したアプローチは問題ありません。より一般的なアプローチは、アプリにユーザーが存在するまで、この VC を提示しないことです。また、すべてのユーザーを何らかのロールに追加してから、そのロールを参照する CLP で「calendarEvents」クラスを保護することもできます。

クエリに関する別のアイデアは、空の結果を保証する修飾子を追加することです。たとえば...

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
}
于 2015-12-07T05:16:49.367 に答える