Ich habe ein tableView
in einem View Controller
mit delegate
und datasource
durch den IB verdrahtet. Ich verwende die tableView
für Multi-Auswahl. In meinem didSelectRowAt IndexPath
, lässt Auswahl der Benutzer eine Beziehung zwischen zwei Core Data Einheiten markieren:Tableview didSelectRowAt indexPath nicht das erste Mal der Ansicht Lasten Brennen funktioniert super zum zweiten Mal
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let wageClassObject = self.wageClasses[indexPath.row]
let wageClassStatus = wageClassObject.value(forKey: "checked") as? Bool
wageClassObject.setValue(!wageClassStatus!, forKey:"checked")
if (wageClassStatus)! {
proposalToEdit?.addToWageClasses(wageClassObject)
}
else {
proposalToEdit?.removeFromWageClasses(wageClassObject)
}
}
Wenn der Benutzer die Ansicht zum ersten Mal lädt, Auswählen einer Zeile hat keine Wirkung. Wenn der Benutzer die Ansicht ein zweites Mal lädt, funktionieren die Funktionen zum Hinzufügen und Entfernen sehr gut.
Ich habe jede vorgeschlagene Lösung in this thread aber keine Würfel versucht. Ich kann auch keinen Fall finden, der mir ähnlich ist, wo das Problem ist, dass es beim ersten Laden der Ansicht nicht funktioniert.
Vorschläge sehr geschätzt!
Edited hinzufügen: viewDidLoad
und Core-Code Daten
override func viewDidLoad() {
loadProposalData()
tableView.reloadData()
super.viewDidLoad()
proposalNameField.delegate = self
pensionField.delegate = self
percentField.delegate = self
if let topItem = self.navigationController?.navigationBar.topItem {
topItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
}
if wageClasses != nil {
getWageClasses()
print("\(wageClasses)")
}
}
func getWageClasses(){
let fetchRequest: NSFetchRequest<WageClass> = WageClass.fetchRequest()
do {
try self.wageClasses = context.fetch(fetchRequest)
} catch {
// handle error
}
}
@IBAction func calculateButtonTapped(_ sender: UIButton) {
var proposal: Proposal!
if proposalToEdit == nil {
proposal = Proposal(context: context)
} else {
proposal = proposalToEdit
}
proposal.dateCreated = currentDateTime as NSDate?
if let proposalName = proposalNameField.text {
proposal.proposalName = proposalName
}
if let pensionContribution = pensionField.text {
proposal.pensionContribution = (pensionContribution as NSString).doubleValue
}
if let percentIncrease = percentField.text {
proposal.percentIncrease = (percentIncrease as NSString).doubleValue
}
/// if let setting the checked value?
adD.saveContext()
_ = navigationController?.popViewController(animated: true)
}
Ich bin nicht viewDidAppear
verwenden.
Ein wenig mehr über die Kerndaten. Ich habe zwei Entitäten, Vorschlag und Lohnklasse. Beide haben eine zu viele Beziehung zueinander. Auf diesem viewController kann der Benutzer den Vorschlag über drei Textfelder bearbeiten (Name, prozentuale Erhöhung, Rentenhöhe) und dann verwandte lohnKlassen aus der tableView auswählen.
Ich möchte, dass der Benutzer die Vorschlagsfelder eingeben und die zugehörigen lohnKlassen auswählen kann, wenn er zum ersten Mal in der Navigationsleiste des vorherigen viewControllers auf die Schaltfläche Hinzufügen klickt. Was passiert, ist, dass der Benutzer auf Hinzufügen klickt, die Daten in die Textfelder eingibt, die Lohnklassen auswählt und Treffer berechnet. Die Textfelder speichern und die Etiketten werden mit den programmierten Berechnungen aktualisiert, aber die lohnKlassen-Daten bleiben Null. Wenn der Benutzer den Vorschlag erneut auswählt (das ist, was ich meine, indem er die Ansicht ein zweites Mal oben lädt), kann der Benutzer die lohnklassen hinzufügen, und alle Berechnungen werden korrekt ausgeführt. Aber nicht vor dieser zweiten Öffnung der Ansicht.
Kannst du zeigen, was genau du in 'viewDidLoad' und' viewDidAppear' Methoden machst und was meinst du mit "zweite Ansicht laden"? View Controller laden ihre Ansicht normalerweise einmal pro App-Lebenszyklus. Gibt es noch mehr Code zum Zugriff auf den Core Data Stack in diesem ViewController? –
bearbeitet, um angeforderte Informationen hinzuzufügen. Vielen Dank! – camelCaseUpInYourFace