0

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.

aheze
  • 24,434
  • 8
  • 68
  • 125

0 Answers0