Что-то, что нужно проверить и устранить Если это происходит только при первом отображении представления, всегда стоит проверить, предполагается ли, что представление загружено, прежде чем выполнять над ним работу. Это происходит не очень часто, но когда это происходит, может быть очень трудно отследить. Чтобы проверить, может ли это быть вашей проблемой, добавьте вызов [viewController view] сразу после того, как вы впервые создадите представление. Это заставляет представление быть загруженным. Если проблема исчезнет, когда вы добавите это, вы отследили источник проблемы. И вы даже можете оставить вызов [viewController view] как исправление или поработать над своим кодом, чтобы учесть ленивую реализацию.
Все это говорит о том, что в вашем табличном представлении гораздо вероятнее будет что-то смешное: cellForRowAtIndexPath: code. Если вы хотите хорошее переполнение стека, опубликуйте весь или соответствующий фрагмент этого кода (или соответствующий код, который он вызывает).
Следите за по опубликованному коду:
(1) if (!viewToCheck) [viewToCheck removeFromSuperview]
ничего не сделает. Он только отправит сообщение removeFromSuperview, когда viewToCheck равен нулю, и это ничего не сделает. Не уверен, что это будет ключевой вопрос, но это то, что нужно исправить.
(2) [cell.contentView addSubview:cellControl];
- это выглядит проблематично - обычно лучше добавлять подпредставления только при создании ячейки. Вы можете скрыть или показать в основной части tableView: cellForRowAtIndexPath: - это, я подозреваю, сработает для вас здесь. С этим кодом есть риск, что вы либо добавите несколько подпредставлений, когда захотите только одно, либо (что может быть здесь происходит), что в итоге вы не удалите подпредставление, когда ячейка будет переработана. Если предполагается, что код viewToCheck
удаляет добавленный cellControl, то, как (1), он не будет делать это сейчас, потому что ваше условие if неверно.