EXC_BAD_ACCESS в основном только для iPad

Когда я тестирую свое приложение на своем iPad, я могу постоянно и надежно привести его к сбою. Когда это происходит, я получаю сообщение об ошибке EXC_BAD_ACCESS в main, и основная причина далеко не очевидна. Я попробовал следующие шаги, чтобы попытаться пролить больше света на это:

  1. Я включил зомби. Это, похоже, никак не повлияло на результаты, что заставляет меня думать, что это не проблема зомби (но, очевидно, я могу ошибаться).
  2. Я добавил точку останова исключения, но когда приложение падает, точка останова исключения не срабатывает, и все, что я получаю, это стандартная зеленая стрелка рядом со строкой 16 основной.
  3. Я запустил Анализатор и исправил несколько незначительных ошибок, которые были там обнаружены. Тем не менее, никакого эффекта.
  4. Я подтвердил, что такая же проблема возникает для двух моих тестеров, которые получают сборку через тестовый полет.
  5. Я выполнил "Чистую", а также "Чистую папку сборки"

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

Где происходит сбой: в приложении у меня есть несколько узлов спрайтов, которые отображают информацию, когда я касаюсь одного из них (на самом деле, я касаюсь дочернего спрайта, сделанного в виде кнопки отмены), что должно случается так, что я удаляю родителя кнопки отмены из его родителя с помощью:

[[self parent] removeFromParent];

Рис стека вызовов:

введите описание изображения здесь

В главном окне xcode ничего нет в консоли, но это в консоли устройства (из окна органайзера:

Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 69 +0.000164 sec [0254/060b]: far -> 788
Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 70 +0.000079 sec [0254/060b]: esr -> 796
Apr 10 08:50:39 Roberts-iPad com.apple.debugserver-310.2[596] <Warning>: 71 +0.000081 sec [0254/060b]: exception -> 800
Apr 10 08:50:42 Roberts-iPad backboardd[31] <Error>: HID: The 'Passive' connection 'Bubble Fit' access to protected services is denied.
Apr 10 08:50:43 Roberts-iPad backboardd[31] <Warning>: CoreAnimation: updates deferred for too long
Apr 10 08:50:57 Roberts-iPad lockdownd[25] <Notice>: 01cdc000 _select_socket: receive secure message timeout!
Apr 10 08:50:57 Roberts-iPad lockdownd[25] <Notice>: 01cdc000 _receive_message: walk away - non-SSL 1

До вчерашнего дня я думал, что я очень, очень близок к отправке:PI был бы признателен за любой совет о том, как пролить больше света на причину этого исключения. Спасибо!

ОБНОВЛЕНИЕ: Как LearnCocos2D указывает ниже, у меня вполне может быть та же ошибка SpriteKit, на которую он ссылается. Предлагаем переопределить removeFromParent. Я попробовал это, но выдает ошибку:

- (void)removeFromParent
{
    [self removeFromParent];
    self = nil;

    [super removeFromParent];
}

Ошибка, которую он выдает, состоит в том, что self не может быть назначено вне init. Как мне это переписать?

1 ответ

Решение

Как оказалось, это действительно была ошибка в SpriteKit, более подробно обсуждаемая здесь:

Сбой Sprite Kit iOS 7.1 при удалении из родительского

Мое исправление состояло в том, чтобы переопределить removeFromParent в подклассе SKShapeNode, который содержал дочерние элементы, которые должны были быть nil'ed перед удалением родителя, как показано ниже:

- (void)removeFromParent
{
    [self.addButton removeFromParent];
    [self.cancelButton removeFromParent];
    self.addButton = nil;
    self.cancelButton = nil;

    [super removeFromParent];
}

Узлы дочерней формы являются свойствами родителя.

Другие вопросы по тегам