UITableViewCell получает _accessibilityUpdateRemoveControl для освобожденного экземпляра - PullRequest
0 голосов
/ 13 марта 2012

Редактировать: хотя в моих комментариях есть рабочий пример iOS 5, я все еще получаю его для других версий. Я реализовал тест для регистрации и удаления ячеек только в iOS 5, но это действительно озадачивает!

все еще получает _accessibilityUpdateRemoveControl исключения, странная неприятность, кажется, что-то с элементами управления редактирования, ничего не сохраняется, поэтому ничто не требует удаления, но попытается, и отправит ответ, если я его найду!

Это работало вчера, а теперь нет ... Я ничего не изменил!

Edit: Оказывается, в то время как reloadData вызывает сбой, сбой не происходит без моего пользовательского tableViewCell ... хммм, что-то об удалении знака +, но это не происходит при удалении!

Фактическая ошибка заключается в следующем: [CustomTableViewCell _accessibilityUpdateRemoveControl]: сообщение отправлено освобожденному экземпляру.

Что забавно, кнопка удаления работает. По сути, он удаляет элемент из массива, добавляет его в другой, в основном помещая его «в другую таблицу». Нет сбоя, работает нормально.

Если я удаляю строку, которая перезагружает данные в таблице, после добавления кнопки вставки это также работает. Например: не сразу перезагружать данные, закрывать окно, возвращаться, все отображается нормально. Точная линия, которая до сих пор падает, находится в

[theTable reloadData], но эта строка для другой таблицы (как я обновляю обе) не падает вообще. На самом деле, благодаря этому, я собираюсь просмотреть заголовки для функций UITableView и просмотреть другие ответы с этой конкретной строкой. Я просто нигде не видел этого после поиска этого странного вызова функции.

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

Спасибо

1 Ответ

0 голосов
/ 15 марта 2012

Я прошел по коду Apple, строка за строкой, прочитал название каждой функции и заметил это: editControlWasClicked: (id) нажал

вызывается непосредственно перед сбоем.Я объединил это с сообщением об ошибке и тем фактом, что я вызываю [table2 reloadData] до того, как это вызывается, и сложил эти части вместе.

Ячейка удаляется (поэтому она перемещается в другую таблицу), но каким-то образомпосле перезагрузки таблицы вызывает системный callBack "editControlWasClicked" ... поскольку он находится в главном потоке, я предполагаю, что таблица многопоточная ... как еще она будет вызываться по порядку, но делать это после перезагрузки??

Итак, чтобы проверить это, я использовал функцию afterDelay, и low, и вот, это сработало.

Вы можете спросить, почему я использую элемент управления add edit в одном ивычтите в другом ... есть цель для этого.

Итак, возможные решения: 1) использовать метод селекторов afterDelay.2) Напишите пользовательский IBAction (потому что это xib) или иным образом используйте пользовательские изображения и функции, чтобы не вызывать их.

Обратите внимание, что 2 предполагает написание дополнительного делегата, чтобы сообщения из ячейкиможет связаться с контроллером представления.

Базовое решение: используйте iOS 5, используйте организацию очереди, в противном случае выполните одно из приведенных выше решений или выясните, какие потоки / зацепки найдены, и найдите способ сделать это без задержки.(Я бы предпочел такой, если смогу его найти)

...