я имею этот сбой происходит, когда я рекурсивный вызов @IBAction@IBAction сбой при рекурсивном называемых
0 Goga 0x00000001000b90b8 function signature specialization <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed> of Goga.NewViewController.emailButtonPressed (Goga.NewViewController)(ObjectiveC.UIButton) ->() (NewViewController.swift:0)
1 Goga 0x00000001000c0488 Goga.NewViewController.(emailButtonPressed (Goga.NewViewController) -> (ObjectiveC.UIButton) ->()).(closure #2) (NewViewController.swift:872)
2 Goga 0x00000001000bd250 partial apply forwarder for reabstraction thunk helper from @callee_owned (@in ObjectiveC.UIAlertAction!) -> (@out()) to @callee_owned (@owned ObjectiveC.UIAlertAction!) -> (@unowned()) (NewViewController.swift:0)
Это код, и линия, которая происходит в его
allowedToSend = false
@IBAction func emailButtonPressed(sender: UIButton) {
if !allowedToSend {
let controller = UIAlertController(title: title,
message: "Are you sure you want to send the Email?",
preferredStyle: .Alert)
controller.addAction(UIAlertAction(title: "Yes please, send.", style: .Default, handler: {
action in
self.allowedToSend = true;
self.emailButtonPressed(sender) <=== WHERE THE CRASH HAPPENED
}))
controller.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: nil))
presentViewController(controller, animated: true, completion: nil)
return // exit the function
}
// Reset the value
allowedToSend = false
// Sending code
let text = textArea.text
let to = toLabel.text
....
}
Вы можете спросить, почему я не помещаю «Код отправки» в обработчик, потому что я делаю это только для конкретного случая, когда пользователь собирается совершить массовую отправку всем контактам в своей адресной книге. Поэтому я напоминаю ей, что она сделает это перед отправкой.
Я не уверен, в чем проблема с такой реализацией и почему Swift жалуется на это, учитывая, что я тестировал это в режиме отладки, и это выглядит нормально. Почему это происходит?
EDIT
Было бы хорошо, если я могу получить некоторое представление о значении аварии.
бесконечной рекурсии, это? –
Я не думаю, что это связано с тем, что предупреждение вызвано действием пользователя. Если пользователь принимает решение «Да, пожалуйста, отправьте». он будет называться. Это происходит очень редко. –
initialize ** allowedToSend ** false по умолчанию, я имел в виду, когда он получил вызов 1-й раз –