2016-03-17 3 views
1

Если вы создаете новый проект, какао и перетащить NSTextField из Object Library к контроллеру вида, который является вашим первоначальным контроллером при запуске, и создать одновременно @IBAction (добавить print(called) в нем) и @IBOutlet, и запустить приложение , то вы не видите метод @IBAction, вызываемый при запуске.Почему @IBAction автоматически вызывается при запуске?

Затем, если вы нажмете возвращение в текстовое поле, вы получите вызванное действие. Однако, и это важно, после того, как вы покинули приложение и снова запустили приложение, вы увидите, что @IBAction вызывается по некоторым причинам (если вы этого не сделаете, попробуйте его пару раз).

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

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

Почему это происходит? Кроме того, если это ошибка на стороне Apple, есть ли способ отключить автоматическое выполнение @IBAction в моем проекте?

Сначала я установил textField.editable = false и установил его в textField.editable = true в viewDidAppear:, но все же активировал действие при запуске. Есть ли способ справиться с проблемой?


Кажется, что если я закрыть окно, нажав на красную иконку и выходе из приложения, а затем запускает его снова изнутри Xcode, то @IBAction не называется. Это так странно ...

ответ

2

Это, очевидно, связано с восстановлением окна на OS X.

Ваше текстовое поле устанавливается как первый ответчик, когда представление нагрузок. Затем, во время восстановления, окно становится первым ответчиком. Это заставляет текстовое поле уходить в отставку с первого ответчика, что вызывает действие.

В IB вы можете установить действие своего текстового поля как «Отправить только для входа». (По умолчанию это «редактирование конца».)

Или вы можете сделать свое окно невосстановимым, если хотите.

+0

О, это так здорово. Затем процесс восстановления окна выполняется после вызова 'viewDidAppear:', правильно? – Blaszard

+1

Согласно некоторым заявлениям NSLog, это правильно. :) –

Смежные вопросы