У меня есть 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 из-за плохого доступа к памяти.
Что вызывает это изменение массива при этом конкретном условии? Или, по крайней мере, как я могу защититься от этого?