Триггер оператора (который не имеет FOR EACH ROW
) не может использовать :OLD
и :NEW
, потому что у него нет доступа к значениям строки. Но в этом случае они вам на самом деле не нужны - вам просто нужно думать по-другому.
Что вас волнует, так это то, что после выполнения заявления есть люди с более чем тремя навыками? Так что вам нужно выяснить, как найти этот бит информации.
Следующее должно сделать это для вас:
create or replace trigger checkskillnum
before insert or update on sneeded
begin
FOR aRow IN (select pnumber, count(*) as SKILL_COUNT
from sneeded
group by pnumber
order by COUNT(*) DESC)
LOOP
IF aRow.SKILL_COUNT > 3 THEN
RAISE_APPLICATION_ERROR(-20030, 'A position does not need more than 4 skills');
END IF;
EXIT; -- The first row will have the highest SKILL_COUNT, so only need to
END LOOP; -- check the first row.
end CHECKSKILLNUM;
Удачи.
Лучшая практика должна иметь Вашу реализацию cellForRowAtIndexPath:
действительно как можно меньше работайте. На самом деле это действительно не должно делать никакой работы кроме заполнения UITableViewCell
экземпляр с данными это должно отобразиться.
Необходимо использовать кэшируемый UITableViewCell
s, таким образом, Вы не должны выделять новую ячейку каждый раз. Если можно сделать парсинг и такой в отдельном потоке и сделать проанализированные данные, готовые представить, доступный для cellForRowAtIndexPath:
, у Вас не должно быть проблем производительности.
Вы не сказали, использовали ли Вы пользовательское UITableViewCell
подкласс, но если Вы, глубоко просматривает иерархии, может также представить проблему производительности, так как каждое представление в иерархии оттянуто. Более плоское можно сделать UITableViewCell
s, лучше.
Надежда, которая получает Вас перемещающийся в правильное направление.
Лучшая вещь сделать представить Ваше приложение для наблюдения, где это медленно.
Тем не менее, если Ваши ячейки таблицы являются всеми одинаковыми высота, то я думаю
reloadData
только должен звонить
cellForRowAtIndexPath
для ячеек, которые видимы на экране.
Начальная загрузка Голове корректна.
Я делаю прогрессивное один за другим обновление списка статьи в Instapaper, и я называю-reloadData на каждой завершенной загрузке. Звучит подобным тому, что Вы делаете. Это не приводит ни к какому значимому замедлению производительности.
Расходы на перезагрузку табличного представления:
В частности, высота строк вычисляется для всех элементов таблицы каждый раз, когда вы вызываете перезагрузку данных.
Оставшиеся расходы - это cellForRowAtIndexPath, что обычно не так уж и плохо, потому что оно вызывается только для того количества строк, которое есть на экране. При прокрутке может быть плохо, если вы не используете повторно ячейки, как положено.
Ключевым моментом для вас, вероятно, будет спросить себя, что вызывает загрузку HTML, и, возможно, переместить это в фоновый поток.