iOS: несуществующий указатель - сбой приложения

Когда я открываю определенную сцену Storyboard, мое приложение вылетает с ошибкой: "неверная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения". У меня также происходят некоторые сбои "EXC_BAD_ACCESS", обычно это один или другой. Я не смог найти проблемный указатель, поэтому я проверил его NSZombieEnabled, Это привело меня к сообщению об аварии:*** -[NSContentSizeLayoutConstraint secondItem]: message sent to deallocated instance 0x1e0a5220

Теперь я искал проект для [NSContentSizeLayoutConstraint secondItem]и даже просто NSContentSizeLayoutConstraint а также secondItem индивидуально. Это не существует нигде в проекте. Я все еще очень плохо знаком с Objective-C и понятия не имею, что делать дальше. Кроме того, он будет работать нормально, как 1 из 5 раз на устройстве и симуляторе. Это также случилось с:-[NSAttributeDictionary release]:, которого нет в моем проекте. Также, *** -[PitchDetector addSamples:inNumberFrames:]:, Они постоянно меняются, и я не могу найти их нигде в своем проекте. И иногда он работает нормально, обычно на симуляторе, что действительно расстраивает, так как ошибка постоянно меняется на устройстве, когда он падает.

Чтобы переключать представления в раскадровке, я использую этот код. Это в viewDidLoad на главном экране:x1ViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"x1ViewController"];

И когда кнопка нажата, чтобы загрузить это:- (IBAction)button4:(id)sender { [self presentViewController:x1ViewController animated:YES completion:nil]; }

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

Вот трассировка стека:

И вот во время анализа я обнаружил странную вещь, которую я не знаю, как исправить:

Обновление: я также иногда получаю сообщение "Ошибка: 1768843636" в консоли после загрузки страницы. Очень странно.

1 ответ

Решение

Чтобы переключать представления в раскадровке, я использую этот код. Это в viewDidLoad на главном экране:

x1ViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] 
                        instantiateViewControllerWithIdentifier:@"x1ViewController"];

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

Переместите этот код в ваш код нажатия кнопки. Вам не нужно создавать экземпляр этого контроллера представления, пока не наступит момент, когда вы его представите. Используйте каждый раз новый экземпляр контроллера представления.

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