Ich versuche, eine einfache App mit einer Tabellenansicht zu programmieren, um einige Dinge zu zeigen. (In diesem Fall heißt es "Grails"/Dinge, die ich kaufen möchte).Wie kann ich eine Liste erneut speichern und laden?
Ich habe alles über die Tabellenansicht und die Eingabe und so weiter gemacht, und das einzige, was ich tun muss, ist, alle Informationen erneut zu speichern und zu laden. Aber ich weiß nicht wie.
Dies ist mein Code auf den ersten Blick Controller:
import UIKit
var list = ["Nike Air Jordan 1 x Off White", "Balenciaga Speed Trainers", "Gucci Snake Sneakers", "Goyard Card Holder"]
class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var myTableView: UITableView!
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return list.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text = list[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
list.remove(at: indexPath.row)
myTableView.reloadData()
}
}
override func viewDidAppear(_ animated: Bool) {
myTableView.reloadData()
}
}
und die zweite View-Controller sieht wie folgt aus:
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var input: UITextField!
@IBAction func addItem(_ sender: Any) {
if (input.text != "") {
list.append(input.text!)
input.text = ""
}
}
}
EDIT:
Jetzt Der Code sieht so, aber ich kann keine neuen Gegenstände der Liste von der Schaltfläche auf der zweiten Ansicht Controller hinzufügen?
Import UIKit
var list = [ "Nike Air Jordan 1 x Off White", "Balenciaga Geschwindigkeit Trainer", "Gucci Snake Sneakers", "Goyard Kartenhalter"]
Klasse FirstViewController: UIViewController wie in den Kommentaren oben genannten Sie können sehr gut, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var myTableView: UITableView!
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return (list.count)
}
func updateData() {
UserDefaults.standard.set(list, forKey: "list")
myTableView.reloadData()
}
//LOADING THE DATA AGAIN
override func viewDidLoad() {
if let storedList = UserDefaults.standard.value(forKey: "list")
{
list = storedList as! [String]
}
else
{
print("No list previously stored")
}
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text = list[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
{
if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
}
else
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}
}
func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool
{
return true
}
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
{
let item = list[sourceIndexPath.row]
list.remove(at: sourceIndexPath.row)
list.insert(item, at: destinationIndexPath.row)
}
@IBAction func edit(_ sender: Any)
{
myTableView.isEditing = !myTableView.isEditing
switch myTableView.isEditing {
case true:
editButtonItem.title = "Done"
case false:
editButtonItem.title = "Edit"
}
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
if editingStyle == UITableViewCellEditingStyle.delete
{
list.remove(at: indexPath.row)
updateData()
}
}
override func viewDidAppear(_ animated: Bool) {
updateData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Zeigt die erste Liste wie gewünscht an? Ich meine, das einzige Problem ist das Update oder haben Sie Probleme von Anfang an?Wenn ja, posten Sie bitte den gesamten Code. Auf der anderen Seite, wenn dies Ihr ** gesamter ** Code ist, dann ist Ihr Problem, dass Sie nicht Ihre Tabellendarstellung 'delegate' setzen. –
Ich bin ziemlich ein Neuling, ahah. Aber das ist der gesamte Code, und dann gibt es am Ende die Funktionen viewDidLoad und didReceiveMemoryWarning, wie sie am Anfang waren. Die Liste wird angezeigt, wie es sollte, und funktioniert einwandfrei. Ich kann hinzufügen und löschen, wie ich möchte. Ich muss nur wissen, wie man die Daten speichert und lädt, wenn die App wieder geöffnet wird. :) –
Ahh Sie sehen, dann ist das die eigentliche Frage (Sie mussten genauer sein). Es gibt mehrere Möglichkeiten, dies zu handhaben. Wenn Ihre Daten klein sind (<1 Mb), dann ist "UserDefaults.standard" der schnellste und einfachste Weg. Wenn nicht, dann solltest du darüber nachdenken, mehr über _CoreData_ zu lesen oder sogar einen 'pod' dafür zu verwenden, wie Realm –