Ich habe ein Problem mit xcode, seit ich auf 8.3.3 aktualisiert habe. Ich arbeite normalerweise mit der MCV (Model - View - Controller) -Methode, und jetzt werden meine Variablen nicht zwischen ihnen aktualisiert.Xcode 8.3.3 Swift 3 - Variable wird nicht zwischen Dateien aktualisiert
Situation: Ich habe ein Modell (speichern Sie alle wichtigen Variablen und Berechnungen Funktionen); ein TableView Controller (Control Tableview) und TableViewCell (Set Outlet und Aktionen)
Ziel: Wenn eine Schaltfläche in einer Zelle gedrückt wird, sollte eine Zeile in TableView hinzugefügt werden.
Problem: Warum erhält die Tabellenansicht nicht den neuen Wert der Model() - Variable.
Um es besser zu machen, hier zu verstehen, eine Zeitleiste ist, was los ist:
Run> viewDidLoad in Tableviewcontroller> aktualisieren Variable Test in Modell() laufen> cellForRowAt aufgerufen und druckt [ "1"] > zeige tableView mit 1 Zeile> drücke die Taste> drucke ["1"]> füge ["2"] zu Model() hinzu> print ["1", "2"]> post notification> viewDidLoad erhält Notification und druckt "reloading table "> cellForRowAt wird aufgerufen und druckt [" 1 "]> tableView behält 1 Zeile. Hier
ist ein Beispiel für meinen Code:
Ich habe meine Model.Swift:
class Model {
var test : [String] = []
}
Mein Tableviewcontroller:
class BudgetTableViewController: UITableViewController {
let model = Model()
override func viewDidLoad() {
super.viewDidLoad()
model.test.append("1")
center.addObserver(forName: NSNotification.Name(rawValue: "reloadTableVIew"), object: appDelegate, queue: queue) {[unowned self] (_) in
print("reloading table")
self.tableView.reloadData()
}
}
zu vereinfachen .. in den Abschnitten I immer wiederkommen " 1 "und für Zeilen zähle ich den Variablentest in Model().
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print(model.test) // **ALWAYS PRINT ["1"]**
let cell = tableView.dequeueReusableCell(withIdentifier: "buttonCell", for: indexPath) as! TableViewCell
return Cell
}
Und mein TableViewCell:
class TableViewCell: UITableViewCell{
let model = BudgetModel()
let notification = Notification(name: Notification.Name(rawValue: "reloadTableVIew"), object: appDelegate)
@IBAction func okButton(_ sender: UIButton) {
print(model.test)
model.test.append("2")
print(model.test)
NotificationCenter.default.post(notification)
}
}
Ich hoffe, es ist klar genug. Der Punkt ist, wenn ich den Knopf 5 Mal drücke, wird es die Zeichenfolge 5 mal zum Array hinzufügen (das wird im Ausdruck bestätigt) aber wenn cellForRowAt aufgerufen wird, wird es immer ["1"] drucken.
Vielen Dank für Ihre Hilfe
Vielen Dank! Das hat perfekt funktioniert! Ich suchte nach einer Möglichkeit, Benachrichtigungen zu vermeiden! Das passt richtig! –