I get this error EXC_BAD_ACCESS (code=2, address=0x16a60ffe0) when the line let vc = RandomViewController
runs.
import UIKit
class PassViewController: UIViewController {
@IBOutlet weak var resultsLabel: UILabel!
@IBOutlet weak var topLabel: UILabel!
var emptyArray: [String] = []
var words: String = ""
let vc = RandomViewController()
//Error on line above
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonPressed(_ sender: UIButton) {
resultsLabel.text = ""
emptyArray.removeAll()
topLabel.text = "Decider"
vc.completionHandler = { text in
self.resultsLabel.text = self.words
}
}
}
Random view controller code
class RandomViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var textField3: UITextField!
@IBOutlet weak var textField4: UITextField!
@IBOutlet weak var textField5: UITextField!
@IBOutlet weak var textField6: UITextField!
@IBOutlet weak var textField7: UITextField!
@IBOutlet weak var textField8: UITextField!
let vc = PassViewController()
var passViewController:PassViewController?
var completionHandler: ((String)-> Void)?
override func viewDidLoad() {
super.viewDidLoad()
textField.becomeFirstResponder()
textField.delegate = self
}
func appendOrSkip() {
if textField.text?.isEmpty == false {
vc.emptyArray.append(textField.text!)
} else {
print("skip")
}
if textField2.text?.isEmpty == false {
vc.emptyArray.append(textField2.text!)
} else {
print("skip")
}
if textField3.text?.isEmpty == false {
vc.emptyArray.append(textField3.text!)
} else {
print("skip")
}
if textField4.text?.isEmpty == false {
vc.emptyArray.append(textField4.text!)
} else {
print("skip")
}
if textField5.text?.isEmpty == false {
vc.emptyArray.append(textField5.text!)
} else {
print("skip")
}
if textField6.text?.isEmpty == false {
vc.emptyArray.append(textField6.text!)
} else {
print("skip")
}
if textField7.text?.isEmpty == false {
vc.emptyArray.append(textField7.text!)
} else {
print("skip")
}
if textField8.text?.isEmpty == false {
vc.emptyArray.append(textField8.text!)
} else {
print("skip")
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
@IBAction func savePressed(_ sender: UIButton) {
appendOrSkip()
vc.emptyArray.shuffle()
if vc.emptyArray.isEmpty == false {
vc.words = vc.emptyArray[0]
vc.topLabel?.text = "Result"
} else {
print("Error")
}
completionHandler?(vc.words)
self.dismiss(animated: true) {
print("dismissed")
}
print(vc.emptyArray)
print(vc.words)
}
}
I have tried address sanitizer, thread sanitizer, and zombie objects, none have resulted in anything. The code runs just fine if I remove both vc = passViewController from the randomViewController or vc = randomViewController from the passViewController, but I need them to pass data between the controllers.