0
import UIKit
import MessageUI

class RechnungViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource, MFMailComposeViewControllerDelegate {


@IBOutlet weak var pickerViewKunde: UIPickerView!
@IBOutlet weak var pickerViewAufgabe: UIPickerView!

@IBOutlet weak var anzahlStundenField: UITextField!

var allKunden = [Kunde]()
var allAufgaben = [Aufgabe]()

var kundeName: String? = ""
var kundeEmail: String? = ""
var aufgabeName: String? = ""
var aufgabePreisString: String? = ""
var endPreis: Int? = 0

@IBAction func rechnungBtn(_ sender: Any) {
    self.berechneRechnung()
    let aufgabePreisInt = Int(aufgabePreisString!)
    let anzStundenInt = Int(anzahlStundenField.text!)
    var endPreis = aufgabePreisInt! * anzStundenInt!


    let composeView = MFMailComposeViewController()
    composeView.mailComposeDelegate = self
    composeView.setToRecipients([kundeEmail!])
    composeView.setSubject("Aktuelle Rechnung")
    composeView.setMessageBody("Sehr geehrte Damen und Herren, \n anbei die Rechnung für folgende Leistung: \n \(aufgabeName ?? "Es ist ein fehler Aufgetreten") über einen Zeitraum von \(anzahlStundenField.text ?? "Es ist ein fehler Aufgetreten") Stunden. \n Daraus ergiebt sich ein Betrag von \(endPreis)Bitte überweisen Sie den Betrag in den nächsten 10 Tagen. \n Mit freundlichen Grüssen \n XY ", isHTML: false)

    if MFMailComposeViewController.canSendMail() {
        self.present(composeView, animated: true, completion: nil)
    } else {
        let alert = UIAlertController(title: "Fehler", message: "Mailversand ncht möglich", preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.getAllKunden()
    self.getAllAufgaben()
}

func getAllKunden() {

    let arr : ArrayKundeResource = ArrayKundeResource()
    self.allKunden = arr.getList()

    print(self.allKunden.count)
}

func getAllAufgaben() {

    let arr : ArrayAufgabeResource = ArrayAufgabeResource()
    self.allAufgaben = arr.getList()

    print(self.allAufgaben.count)
}

func berechneRechnung() {
    let aufgabePreisInt = Int(aufgabePreisString!)
    let anzStundenInt = Int(anzahlStundenField.text!)
    endPreis = aufgabePreisInt! * anzStundenInt!
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    var rowCount: Int = self.allKunden.count

    if pickerView == pickerViewAufgabe{
        rowCount = self.allAufgaben.count
    }
    return rowCount
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if pickerView == pickerViewKunde {

        if self.allKunden.isEmpty == false {
            return self.allKunden[row].name
        }
    } else if pickerView == pickerViewAufgabe {
        let rowTitle = self.allAufgaben[row]
        return rowTitle.nameDerAufgabe
    }
    return "nicht Vorhanden"
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == pickerViewKunde {
        self.kundeName = self.allKunden[row].name
        self.kundeEmail = self.allKunden[row].email
    }else if pickerView == pickerViewAufgabe {
        self.aufgabeName = self.allAufgaben[row].nameDerAufgabe
        self.aufgabePreisString = self.allAufgaben[row].preisProStunde
    }
}
}

Now my Problem is the following.

When i spin a pickerView the app is crashing with the error code Thread 1: Signal SIGABRT and when i click the button to create the mail the app crash again with the error code Thread 1: EXC_BAD_INSTRUCTION.

I'm already saying thank you for the help.

rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • And do you have an error message in the console log? – Larme Jun 27 '17 at 22:44
  • Something or somethings is/are `nil` - Set an exception breakpoint to identify the line and what is `nil` – Paulw11 Jun 27 '17 at 22:51
  • Also, all those ! in your `rechnungBtn` are asking for trouble. In particular, `var endPreis = aufgabePreisInt! * anzStundenInt!` will crash if `aufgabePreisString` or `anzahlStundenField.text` couldn't be parsed as an Integer. Don't just throw ! in until it compiles; think about what optionals mean and code defensively. – Paulw11 Jun 27 '17 at 22:54
  • @Larme i get the following when the app crash because the pickerView: "libc++abi.dylib: terminating with uncaught exception of type NSException" and when the app crash when i touch the button: "fatal error: unexpectedly found nil while unwrapping an Optional value" – David Zerweck Jun 27 '17 at 22:54

0 Answers0