5 апреля 2011 г.

DevelopBrief #2

Мания перетаскивания

Простой вопрос - как в приложении с TabBarController в XCode 4 изменить тип вкладки с UIViewController на UINavigationController? Никак (поправьте, если ошибаюсь). Панель Utilities этого сделать не позволяет (как это было в XCode 3.x). Через меню тем более не поменять. Единственный вариант - перетащить в Interface Builder иконку UINavigationController из Object Library на Tab Bar. Я, признаюсь, не догадался. Как-то не очень интуитивно. Впрочем, удивляться не следует. Новый XCode падок на "перетасканивания": связь кода с элементами интерфейса в IB (удобно), создание шаблонов кода (не очевидно). Думаю, что еще наткнусь на случаи применения такого подхода.


Когда уходят строки

Столкнулся с одной особенностью мехнизма изменения таблиц в iOS. Попытка удаления пользователем строки из таблицы обрабатывается сообщением с приблизительно следующим содержанием:

В текущем проекте необходимо сделать наброски интерфейса, чтобы продемонстрировать начальству работу приложения "вхолостую". Для простоты не стал использоваться dataSource, а просто указал количество строк в единственной секции и всегда возвращал одну и ту же ячейку. При попытке удаления строки получил прекрасное сообщение об ошибке:
Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (5), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted)
Причина появления таких грязных ругательств в том, что при вызове deleteRowsAtIndexPaths: withRowAnimation: система перед тем как удалить строку проверяет выполнение равенства X + Y = Z, где X - конфигурация строк в каждой секции до изменения, Y - те, операции, которые подразумевает вызываемое сообщение (в данном случае - удаление 1 строки), Z - конечное состояние секций. Вызываемое сообщение подразумевает, что dataSource уже изменен, поэтому если в обычном рабочем варианте переставить строки так:
то мы получим ту же ошибку.

Введение счетчика удаленных/добавленных строк быстро разрешает конфуз (ключевое слово - "быстро").

Ничего особенного в этом наблюдении нет, но все же приятно заглянуть в устройство некоторой системы, смотря на нее лишь снаружи :)

Комментариев нет:

Отправить комментарий