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
слишком рано Вы даже не находитесь в интерфейсе и уже пытаетесь перейти к следующему состоянию интерфейса. Более того, вы рискуете попытаться представить один и тот же экземпляр контроллера представления в разных случаях.
Переместите этот код в ваш код нажатия кнопки. Вам не нужно создавать экземпляр этого контроллера представления, пока не наступит момент, когда вы его представите. Используйте каждый раз новый экземпляр контроллера представления.