Как разбить чат на чат из хранилища, прокручивая его вверх и одновременно добавив слушателя - PullRequest
0 голосов
/ 11 октября 2019

Я новичок в swift, и мне удалось создать приложение для чата, просмотрев учебники. Прямо сейчас, когда я нажимаю на пользователя, он ведет меня к контроллеру чата, и он успешно может получать сообщения. Все отлично работаетТо, что мне нужно реализовать, - это возможность разбивать чат на страницы, когда я прокручиваю вверх. Прямо сейчас я получаю все сообщения каждый раз, когда открывается комната чата.

Я проверил документы Google Firestore о том, как это сделать, но из-за жизни я не могу собрать это воедино,Имейте честное представление о том, как это работает теоретически. Но так как я добавил слушателей снимков, это немного сбивает с толку.

Также понятия не имею, как настроить scrollView для загрузки при достижении вершины

class ChatLogController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

//MARK: Initialize

fileprivate let connect: Connect
var listener: ListenerRegistration?
var currentUser: User?

init(connect: Connect){
    self.connect = connect
    super.init()
}   

//MARK: ****View Did Load****

override func viewDidLoad() {
    super.viewDidLoad()
    fetchCurrentUser()
    fetchPaginatedMessages()
    setupView()
}

//MARK: Fetch Current User

fileprivate func fetchCurrentUser(){
       //Some code  
        print("Current User Fetched Successfully")
        self.currentUser = User(dictionary: data)
    }
}

//MARK: Setup View
//Some code that fetches the front end


//MARK: FetchPaginatedMessages - Code does not contain attempted pagination

fileprivate func fetchPaginatedMessages(){

    print("Fetching Messages")
    guard let cUid = Auth.auth().currentUser?.uid else {return}

    let query = Firestore.firestore().collection("matches").document(cUid).collection(connect.uid).order(by: "Timestamp")

    listener = query.addSnapshotListener { (querySnapshot, error) in
        if let error = error{
            print("There was an error fetching messages", error.localizedDescription)
            return
        }

        querySnapshot?.documentChanges.forEach({ (change) in
            if change.type == .added{
                let dictionary = change.document.data()
                self.items.append(.init(dictionary: dictionary))
                print("ARCHID ---- FIRESTORE HAS BEEN CONTACTED FETCHING MESSAGES")
            }
        })

        self.collectionView.reloadData()

        self.collectionView.scrollToItem(at: [0, self.items.count - 1], at: .bottom, animated: true)
        print("Fetched messages")
    }
}

Включены основные части кода. Опущен нерелевантный код для удобства чтения. В func fetchPaginatedMessages я собираюсь выполнить нумерацию страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...