Быстрая ошибка кнопки в приложении iOS, но не на игровой площадке

Я пытаюсь научиться быстро создавать бесплатное учебное приложение для своей страны.

Я знаю только основы программирования и быстроты, но я пытаюсь понять развитие iOS.

Я думаю, что у меня проблема с объемом, но не знаю, что делать.

Когда didMoveToView (обязательно) в соответствии с прочитанными мной книгами, я не могу скомпилировать и выполнить код. Итак, когда я запускаю его в Xcode iOS App Project, мое приложение падает (даже если оно работает на игровой площадке).


Код:

 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() class fooo { static var bar = "hello world!" @IBAction func hello_button(sender: AnyObject) { print(fooo.bar) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

Ниже находится журнал сбоев (появляется при нажатии кнопки):

 2016-08-26 07:22:00.512 k[2074:37791] -[k.ViewController hello_button:]: unrecognized selector sent to instance 0x7aa2e670 2016-08-26 07:22:00.521 k[2074:37791] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[k.ViewController hello_button:]: unrecognized selector sent to instance 0x7aa2e670' *** First throw call stack: ( 0 CoreFoundation 0x00200494 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x01f17e02 objc_exception_throw + 50 2 CoreFoundation 0x0020a253 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 3 CoreFoundation 0x0013f89d ___forwarding___ + 1037 4 CoreFoundation 0x0013f46e _CF_forwarding_prep_0 + 14 5 libobjc.A.dylib 0x01f2c0b5 -[NSObject performSelector:withObject:withObject:] + 84 6 UIKit 0x009f2e38 -[UIApplication sendAction:to:from:forEvent:] + 118 7 UIKit 0x009f2db7 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64 8 UIKit 0x00b96f3b -[UIControl sendAction:to:forEvent:] + 79 9 UIKit 0x00b972d4 -[UIControl _sendActionsForEvents:withEvent:] + 433 10 UIKit 0x00b962c1 -[UIControl touchesEnded:withEvent:] + 714 11 UIKit 0x00a7352e -[UIWindow _sendTouchesForEvent:] + 1095 12 UIKit 0x00a745cc -[UIWindow sendEvent:] + 1159 13 UIKit 0x00a15be8 -[UIApplication sendEvent:] + 266 14 UIKit 0x009ea769 _UIApplicationHandleEventQueue + 7795 15 CoreFoundation 0x00112e5f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 16 CoreFoundation 0x00108aeb __CFRunLoopDoSources0 + 523 17 CoreFoundation 0x00107f08 __CFRunLoopRun + 1032 18 CoreFoundation 0x00107846 CFRunLoopRunSpecific + 470 19 CoreFoundation 0x0010765b CFRunLoopRunInMode + 123 20 GraphicsServices 0x04717664 GSEventRunModal + 192 21 GraphicsServices 0x047174a1 GSEventRun + 104 22 UIKit 0x009f0eb9 UIApplicationMain + 160 23 k 0x00012581 main + 145 24 libdyld.dylib 0x02935a25 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException 

Вы правы, проблема в области (при условии, что вы правильно подключили вашу кнопку, как упоминалось в других):


 import UIKit class ViewController: UIViewController { class fooo { var bar = "hello world!" func mSayBar() { print(self.bar)} } var foo = fooo() @IBAction func hello_button(sender: AnyObject) { foo.mSayBar() } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

viewDidLoad – это собственная локальная область действия – она ​​не распространяется дальше, чем конечная скобка »}« После первого (миллисекунды?) все, объявленное в VDL, уже не живое; таким образом, он лучше всего подходит для инициализации или вызова, а не для объявления.

Чтобы объявить глобальное, просто поместите все в новый быстрый файл или поместите его вне всех областей класса. Swift упрощает глобальный охват (но будьте осторожны)

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

unrecognized selector sent to instance 0x7aa2e670 означает, что кнопка связана с выходом IBAction который не определен в вашем коде. Перейдите в режим раскадровки ViewController и щелкните правой кнопкой мыши в списке под просмотр. Проверьте, есть ли выход для события Touch Up Inside, и если он имеет то же имя, что и функция в коде, которую вы хотите вызвать (в вашем случае это hello_button .

Вот картина, если вы не поняли вышеприведенный параграф.

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

  • Как преобразовать координаты CoreLocation в String?
  • Добавлено Fabric / Crashlytics для нового проекта, но не загружает dSYM
  • Селектор для другого ViewController
  • 'openParentApplication (_: reply :)' явно помечен как недоступный здесь - Xcode 7 Beta
  • Parse geode swift не получает текущее местоположение
  • Swift AVAudioEngine crash: игрок запускается, когда в отключенном состоянии
  • Swift: сделать кнопку триггера новой сценой
  • прикоснитесь к шутливому спрайту, не стреляйте быстрым
  • Условное значение для MessageComposeResult в MFMessageComposeViewController с быстрым
  • applicationDidBecomeActive запускается после загрузки ViewController
  • Как отключить ландшафтную ориентацию в приложении iPad?
  • Давайте будем гением компьютера.