Я создал массив объектов в главном делегате приложения, который загружает данные из базы данных sqlite. Когда я загружаю TableView, свойство в этом классе устанавливается для указания на массив объектов. Затем, когда отображается TableView, он правильно возвращает счетчик массива для количества строк и отображает текст в ячейке из свойства соответствующего объекта в массиве.
У меня также есть кнопка обновления в верхнем правом углу панели навигации, которая выходит и загружает файл XML из сети, анализирует его, а затем обновляет базу данных.
Затем я воссоздаю основной массив объектов из базы данных и указываю свое свойство TableView на новый массив, а затем прошу TableView перезагрузить данные. Вот где он затем падает с EXC_BAD_ACCESS.
Я прошел с отладчиком и определил, что все правильно до вызова reloadData
. База данных и основной массив синхронизированы, и пользовательское свойство TableView также указывает на основной массив.
Затем, когда я перешёл к отладчику, я заметил пару вещей. Во-первых, когда он вызывает numberOfRowsInSection
, указатель на основной массив является правильным, а количество строк - правильным. Во-вторых, когда он достигает первого вызова cellForRowAtIndexPath
, указатель на основной массив указывает на недопустимый раздел памяти. Фактический адрес памяти тот же, но массив объектов исчез.
Я не могу понять, как массив исчезает в середине перезагрузки, как это, потому что мой счетчик ссылок должен быть больше нуля, поэтому сборка мусора не должна производиться. Поэтому мой вопрос: кто-нибудь имеет представление о том, что может происходить? И во-вторых, как определить точное местоположение проблемы?