setNeedsDisplay не всегда называет drawRect

Используйте объединение / количество / группу по:

SELECT 
    employees.employeenumber, -- employee id
    employees.lastname, -- sample employee name
    COUNT(customers.customernumber) AS customer_count -- the number of customers
FROM employees
LEFT OUTER JOIN customers -- I'm using a left join so we can see people with 0 as well
    -- get some shorter column names man
    ON customers.salesrepemployeenumber = employees.employeenumber
GROUP BY employees.employeenumber

Короче говоря, вы выбираете всех сотрудников, затем объединяете их с результатами таблиц клиентов, а затем группируете их по идентификатору сотрудника. Используя COUNT во время операции GROUP BY, мы можем подсчитать количество различных записей в определенной группе.

Отсюда вопрос выбора наибольшего значения из результатов, что так же просто, как использовать LIMIT / ORDER BY

SELECT ...
ORDER BY customer_count DESC
LIMIT 1
10
задан kareman 18 May 2009 в 00:12
поделиться

4 ответа

Думаю, я боролся с этой проблемой почти неделю, прежде чем обнаружил проблему. Вот он, и я не шучу:

Указатель на это настраиваемое представление был определен в файле .m вместо файла .h, что сделало его переменной класса вместо переменной экземпляра.

И да, я мне очень-очень неловко.

13
ответ дан 3 December 2019 в 18:35
поделиться

setNeedsDisplay будет вызывать drawRect: , только если представление является видимым, в противном случае он делает недействительным слой представления и drawRect: будет вызываться, он становится видимым.

При прокрутке табличного представления табличное представление будет запрашивать ячейки в надежде добавить их в представление. Если прокрутка выполняется достаточно быстро, подготовка некоторых ячеек займет слишком много времени, и к тому времени, когда они будут готовы, место, где они должны быть размещены, окажется за кадром. В этих случаях табличное представление отбрасывает их вместо добавления в представление прокрутки (и, таким образом, drawRect: не будет вызываться)

7
ответ дан 3 December 2019 в 18:35
поделиться

Вы должны позвонить [_ table_ reloadData] , чтобы перерисовать таблицу. Не [_ table_cell_ setNeedsDsiplay]

1
ответ дан 3 December 2019 в 18:35
поделиться

Похоже, есть два обстоятельства, при которых представление обновляется: если внутреннее значение изменяется (и вы вызываете [self setNeedsDisplay] для принудительного обновления) и также, если tableview запрашивает отрисовку (или повторное использование) ячейки. В этой ситуации вы не перерисовываете это пользовательское представление явно.

Согласно документам:

Делегат табличного представления в tableView: cellForRowAtIndexPath: должен всегда сбрасывать все содержимое при повторном использовании ячейки.

Если tableview перерабатывает ячейки, оно вернет ячейку со старыми значениями, оставшимися на своих местах. Вы должны убедиться, что контент обновлен. В зависимости от того, как вы настроили пользовательскую ячейку таблицы,

0
ответ дан 3 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: