UITableView прокручивает слишком далеко и вызывает странные вещи - PullRequest
4 голосов
/ 30 марта 2009

У меня есть UITableView, который при прокрутке на далеко подпрыгивает мешок. Это также означает, что пользователь может перетаскивать таблицу, чтобы была видна только половина, а другая половина основного вида была белой. Это вызывает странное поведение в моем приложении. Я создаю массив в AppDelegate. В viewDidLoad RootViewController я получаю ссылку на AppDelegate и сохраняю ее до тех пор, пока приложение не закроется. В cellForRowAtIndexPath RootViewController я ссылаюсь на массив экземпляра AppDelegate, чтобы получить объекты, которые будут заполнять метки ячеек. Это работает нормально, пока пользователь не прокрутит, как указано выше. Когда это происходит, в отладчике можно увидеть, что объект 7, например, в массиве, превратился в UICachedDeviceRGBColor. Я понятия не имею, почему это происходит. Массив назначается только один раз в AppDelegate при создании приложения. С этого момента ссылка только на чтение.

Из того, что я могу сказать, я должен сначала щелкнуть строку в таблице. Новое представление выдвигается, которое также имеет UITableView. в cellForRowAtIndexPath этого второго представления я проверяю Delegate.array, так как второе представление также имеет ссылку на массив. Я сразу вижу, что объект 2 в массиве:

2 : UIDeviceRGBColorSpace 1 1 1 1

чего не должно быть. Затем, когда я нажимаю назад и снова отображается основная таблица, выполните описанную выше технику прокрутки, чтобы получить странность. Я прокручиваю таблицу настолько, чтобы достичь точки останова в cellForRowAtIndexPath и вижу, что массив был изменен. Объект два - правильный тип, но теперь объект 7 - нет.

Проблема в том, что если я пытаюсь получить доступ к объекту 7 и вызвать свойство для типа, к которому я приведу тип, то это свойство, конечно, не существует в UICachedDeviceRGBColor. Это Inavlid, и поэтому я получаю EXC_BAD_INSTRUCTION из-за плохого доступа к памяти.

Что вызывает это изменение массива при этом конкретном условии? Или, по крайней мере, как я могу защититься от этого?

Ответы [ 2 ]

4 голосов
/ 30 марта 2009

Это на устройстве, но выглядит так, как будто я понял.

В didSelectRowAtIndexPath RootViewController я получаю один из объектов из Delegate.thearray. Непосредственно перед тем, как нажать 2-й вид, я освобождаю этот объект. Это неправильно, так как я не выделил объект. Убрал эту строку и больше никаких странностей в массиве. Кажется, сейчас все работает как обычно.

0 голосов
/ 30 марта 2009

Это на симуляторе или устройстве?

Я обнаружил, что нечто подобное может произойти только на симуляторе, когда я использовал колесо прокрутки на моей мыши для прокрутки таблицы. Симулятор не может сказать, когда вы отпускаете колесо прокрутки, поэтому не знает, когда вернуться назад. Затем, когда я прикасаюсь, он выскочит назад и зарегистрирует мое касание на другом предмете, чем я коснулся. Это не произошло на устройстве. Когда вы прокручиваете устройство с помощью полосы прокрутки, оно появляется сразу после отпускания, поэтому вы не можете коснуться элемента при чрезмерной прокрутке.

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