仅从当前用户登录显示TableView中的帖子

时间:2017-02-09 15:09:32

标签: ios swift firebase firebase-realtime-database firebase-authentication

我有一个viewcontroller使用tableview和cells显示一些帖子。所有数据都是从Firebase(数据库和用户)获取的。

我有一个登录屏幕,然后才能到达feedview。

我想在该tableview控制器中仅显示当前用户登录的彩池。怎么可能?

我的数据库是这样构建的:

enter image description here

对于我的登录页面,我使用以下内容:

//
//  Feed.swift
//  MobileAppDemo
//
//  Created by Mikko Hilpinen on 31.10.2016.
//  Copyright © 2016 Mikkomario. All rights reserved.
//

import UIKit
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
import SwiftKeychainWrapper
import SwiftyJSON

var posts = [Post]()
var selectedIndexPath: Int = 0

class FeedVC: UIViewController, UITableViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITableViewDelegate {

@IBOutlet weak var feedTableView: UITableView!

private var readPosts: ObserveTask?

override func viewDidLoad() {
    super.viewDidLoad()

    feedTableView.dataSource = self
    feedTableView.delegate = self

    readPosts = Post.observeList(from: Post.parentReference.queryOrdered(byChild: Post.PROPERTY_CREATED)) {
        observedPosts in

        posts = observedPosts.reversed()
        self.feedTableView.reloadData()
    }
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell  {
    let cell = self.feedTableView.dequeueReusableCell(withIdentifier: "MessageCell")! as UITableViewCell

    let imageView = cell.viewWithTag(1) as! UIImageView
    let titleLabel = cell.viewWithTag(2) as! UILabel

    titleLabel.text = posts[indexPath.row].title
    titleLabel.numberOfLines = 0

    Storage.getImage(with: posts[indexPath.row].imageUrl){
        postPic in
        imageView.image = postPic
    }

    return cell

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedIndexPath = indexPath.row
    self.performSegue(withIdentifier: "push", sender: self)
    self.feedTableView.reloadData()
}
}

要在表格视图中显示我的数据,请使用此视图控制器:

//
//  MessageCell.swift
//  MobileAppDemo
//
//  Created by Mikko Hilpinen on 31.10.2016.
//  Copyright © 2016 Mikkomario. All rights reserved.
//

import UIKit
import FirebaseStorage

class MessageCell: UITableViewCell
{

@IBOutlet weak var messageImageView: UIImageView!
@IBOutlet weak var messageTextView: UITextView!
@IBOutlet weak var titleTextView: UITextView!
@IBOutlet weak var linkbutton: UIButton!


private var post: Post!

func configureCell(tableView: UITableView, post: Post)
{
    self.post = post

    // Basic info
   titleTextView.text = post.title
    messageTextView.text = post.caption

    // Post user
    User.get(id: post.creatorId)
    {
        postCreator in 


    }



    // Image
    Storage.getImage(with: post.imageUrl)
    {
        postPic in

        self.messageImageView.image = postPic
        // Row height changes so table needs to be reset
        tableView.beginUpdates()
        tableView.endUpdates()
    }
}
}

最后是我的细胞:

 SELECT client_id, start_date, end_date, 
        min(spend_perc) as min_spend_perc, max(spend_perc) as max_spend_perc
   FROM mytable
  GROUP BY client_id, start_date, end_date;

如果有人有任何线索/建议我怎么能实现呢?这将是令人难以置信的:) :)

非常感谢!!!

1 个答案:

答案 0 :(得分:0)

使用queryOrdered(byChild:)数据库引用queryEqual(toValue:)添加User.currentUserId并将其与readPosts = Post.observeList(from: Post.parentReference .queryOrdered(byChild: Post.PROPERTY_CREATED) .queryEqual(toValue: User.currentUserId)) { observedPosts in posts = observedPosts.reversed() self.feedTableView.reloadData() } 进行比较。

result()