EXC_BAD_INSTRUCTION при нажатии кнопки

Я новичок в Swift, и в настоящее время я пытаюсь его изучить, но столкнулся с загадочной проблемой. Как вы можете видеть на изображении ниже, есть некоторые элементы управления, которые правильно связаны с этим контроллером представления, и при нажатии кнопки в пользовательском интерфейсе мы выполняем этот код ниже, но я всегда получал EXC_BAD_INSTRUCTION. Я не понимаю, почему!!

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

Вот некоторая информация из трассировки стека.

(lldb) thread info
thread #1: tid = 0x9319, 0x0006c5d5 App`App.AViewController.sendCommentViaEmail (self=<unavailable>)() -> () + 9349 at AViewController.swift:49, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

(lldb) frame select 1
frame #1: 0x037067cd libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 84
libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 84:
-> 0x37067cd:  addl   $0x1c, %esp
   0x37067d0:  popl   %esi
   0x37067d1:  popl   %edi
   0x37067d2:  popl   %ebx

ОТРЕДАКТИРОВАНО:

Stacktrace ниже

* thread #1: tid = 0x1e19, 0x0005a5d5 A`A.AViewController.sendCommentViaEmail (self=<unavailable>)() -> () + 9349 at AViewController.swift:49, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
  * frame #0: 0x0005a5d5 A`A.AViewController.sendCommentViaEmail (self=<unavailable>)() -> () + 9349 at AViewController.swift:49
    frame #1: 0x036f47cd libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 84
    frame #2: 0x01ea323d UIKit`-[UIApplication sendAction:to:from:forEvent:] + 99
    frame #3: 0x02213840 UIKit`-[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 139
    frame #4: 0x036f47cd libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 84
    frame #5: 0x01ea323d UIKit`-[UIApplication sendAction:to:from:forEvent:] + 99
    frame #6: 0x01ea31cf UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
    frame #7: 0x01fd6e86 UIKit`-[UIControl sendAction:to:forEvent:] + 69
    frame #8: 0x01fd72a3 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 598
    frame #9: 0x01fd650d UIKit`-[UIControl touchesEnded:withEvent:] + 660
    frame #10: 0x01ef360a UIKit`-[UIWindow _sendTouchesForEvent:] + 874
    frame #11: 0x01ef40e5 UIKit`-[UIWindow sendEvent:] + 791
    frame #12: 0x01eb9549 UIKit`-[UIApplication sendEvent:] + 242
    frame #13: 0x01ec937e UIKit`_UIApplicationHandleEventFromQueueEvent + 20690
    frame #14: 0x01e9db19 UIKit`_UIApplicationHandleEventQueue + 2206
    frame #15: 0x039791df CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    frame #16: 0x0396eced CoreFoundation`__CFRunLoopDoSources0 + 253
    frame #17: 0x0396e248 CoreFoundation`__CFRunLoopRun + 952
    frame #18: 0x0396dbcb CoreFoundation`CFRunLoopRunSpecific + 443
    frame #19: 0x0396d9fb CoreFoundation`CFRunLoopRunInMode + 123
    frame #20: 0x085dc24f GraphicsServices`GSEventRunModal + 192
    frame #21: 0x085dc08c GraphicsServices`GSEventRun + 104
    frame #22: 0x01ea18b6 UIKit`UIApplicationMain + 1526
    frame #23: 0x000919cc A`main(argc=1, argv=0xbffaa62c) + 76 at main.m:12
    frame #24: 0x04490ac9 libdyld.dylib`start + 1

Вот свойства, которые я использую: я получил один и тот же результат независимо от того, связаны они с пользовательским интерфейсом или нет.

Свойства, связанные с элементами управления пользовательского интерфейса, и тот же результат


person Maystro    schedule 08.02.2015    source источник
comment
Покажите трассировку стека из Xcode.   -  person gnasher729    schedule 08.02.2015
comment
Как создать экземпляр контроллера представления, в котором находится этот код?   -  person pbasdf    schedule 16.02.2015
comment
Можете ли вы предоставить скриншот Инспектора подключений для коммутатора?   -  person Oren    schedule 18.02.2015
comment
У вас есть старое подключение из вашей раскадровки к вашему @IBOutlet var?   -  person boidkan    schedule 18.02.2015


Ответы (3)


Откуда emailToMyselfSwitch? Если это IBOutlet, похоже, вы забыли подключить его из IB к своему коду. Если это не так, пожалуйста, покажите больше контекста.

person fz.    schedule 08.02.2015
comment
Нет, он уже подключен и даже не подключен, он не должен крашиться!! По крайней мере это то, что я знаю.. - person Maystro; 08.02.2015
comment
Это рухнет. Поскольку вы определяете свойство как развернутый необязательный элемент, но без подключения из Interface Builder, свойство будет нулевым: поэтому при попытке доступа к вашему необработанному (нулевому) необязательному параметру будет предпринята попытка разыменовать нулевой указатель. - person fz.; 08.02.2015
comment
Убедитесь, что элемент управления связан с вашим IBOutlet, щелкнув правой кнопкой мыши элемент управления переключателем в построителе интерфейса. - person fz.; 08.02.2015
comment
Мне все же кажется, что управление выключателем не подключено к вашей розетке. Возможно, action подключен к IBAction, но не к IBOutlet, и вам нужно подключить оба. - person fz.; 08.02.2015

Эта ошибка EXC_BAD_INSTRUCTION обычно означает, что вы вызываете свойство или метод (селектор?) для нулевого объекта или объекта, который не может ответить на селектор, т.е. self.null.on, или для свойства, к которому нельзя получить доступ, поскольку оно было освобождено.

В прошлом у меня были проблемы с отпаданием этих слабых варов. Попробуйте удалить weak в своем ресурсе.

person Aaron    schedule 13.02.2015

ваш код правильный. Проблема не в соединении с розеткой. Я проверил и печатает: «Значение: ноль». Проблема в другой части кода. Сообщение "self=" не является нормальным. Вы можете показать нам больше информации.

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

person Miguel    schedule 14.02.2015