Курс 6 Чат. 100 UILabel и ни одним больше


#1

День добрый.
В своем приложении сделал чат, потихоньку модернизирую и столкнулся со след проблемой:
При общем кол-ве 100 (ста) сообщений (100 UILabel) новые перестают добавляться на экран.
Это связано с ограничением xcode (swift)? Или как?

PS Решением проблемы является tableview, но вопрос остается вопросом. СпасибО!


#2

Самое ужасное что в tableview тоже отображается только 100 строк (ячеек)…
wtf?

Упс! Это лимит PFQuery по умолчанию - 100/


#3

Ура быстро закончилось!!!
Пришло осознание проблемы.
Вот такой фокус не годится:
let predicate1 = NSPredicate(format: “senderId = %@ AND recipientId = %@ AND objectIdOrder = %@”, (MyUser.current()?.objectId)!,recipientId!,objectIdOrder!)
let predicate2 = NSPredicate(format: “senderId = %@ AND recipientId = %@ AND objectIdOrder = %@”,recipientId!, (MyUser.current()?.objectId)!,objectIdOrder!)

    let query1 = PFQuery(className: "Message", predicate: predicate1)
    query1.limit = 500
    let query2 = PFQuery(className: "Message", predicate: predicate2)
    query2.limit = 500
    let resultQuery = PFQuery.orQuery(withSubqueries: [query1,query2])
    resultQuery.addAscendingOrder("createdAt")
    resultQuery.limit = 1000

поскольку постольку использовать OR queryes и limit нельзя (ну бывает, что поделаешь).
Что же делать?
Выполнять два запроса отдельно, собирать по три массива:
messageArray и message2Array
senderArray и sender2Array
createdArray и created2Array

Затем массивы объединяем, добавляем массив словарей и сортируем по времени.
Итого получаем упорядоченный массив словарей по времени отправки сообщения.
Это можем выводить.

Внимание вопрос: это нормальное решение или костыль?


#4

Продолжаю свой монолог в надежде на диалог:

Как открыть UITableView “c конца”. Т.е. не пролистать вниз, что выглядит не очень красиво, а именно начать работу с tableview c самой последней ячейки?
При использовании данного варианта с анимацией - ожидание в несколько секунд листания таблицы в 150 строк. Без анимации - быстро, но рывок резкий. Хотелось бы чтобы сразу отображалась нижняя ячейка.
Есть варианты?

func tableViewToDown(animated: Bool) {
    DispatchQueue.main.asyncAfter(deadline: .now()) {
        let numSections = self.messageTableView.numberOfSections
        let numRows = self.messageTableView.numberOfRows(inSection: numSections-1)
        
        if numberOfRows > 0 {
            let indexPath = IndexPath(row: numRows-1, section: (numSections-1))

            self.messageTableView.scrollToRow(at: indexPath, at: .bottom, animated: animated)
        }
    }
}

#5

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#6

а толку? тогда отображение контента будет наоборот, а нужно именно то о чем я писал.

В мессенджерах же новые сообщения внизу появляются, а не вверху


#7

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#8
    messageTableView.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi))
    cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi))

Развернул массив наоборот и экран развернул…
Всё работает как надо. Показывается сразу нижнее сообщение (в самом низу tableview)


#9

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


Закрыл тему #10