2017-12-31 154 views
0

nicht anzeigen Ich habe einen Meme-Generator gebaut und ich habe den View-Controller eingebettet, der die Meme-Erstellung in einem Tab-Leiste View-Controller behandelt. Die erste Registerkarte zeigt eine Tabellenansicht an und ich versuche, diese Tabellenansicht anzuzeigen, sobald sie über die Aktivitätsansicht gespeichert wurden. Ich habe meiner App-Delegatendatei ein Meme-Array hinzugefügt (ich weiß, dass dies umstritten ist, aber es ist eine Voraussetzung für diese Übung), und ich habe bestätigt, dass das Meme gespeichert und an die App-Delegatendatei übergeben wird.Kann Array-Daten von App Delegate in der Tabellenansicht Zelle

Ich möchte das Bild und den Text des gespeicherten Memes in der Tabellenansicht anzeigen, wenn der Benutzer ein neues Mem erstellt. Hier ist was ich habe und das funktioniert nicht.

import UIKit 

class TableViewMemesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    var memes: [Meme]! 

    override func viewDidLoad() { 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     memes = appDelegate.memes 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return memes.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 
     let meme = memes[indexPath.row] 
     cell?.imageView?.image = meme.memedImage 
     cell?.textLabel?.text = meme.topText 
     return cell! 
    } 

} 

Wohin gehe ich falsch? Der Prozess von CellForRowAt ist für mich noch neu und frustrierend. Here ist ein Link zum Repo.

+0

So haben Sie 1 Registerkarte für Meme Erstellung und anoth um die erstellten Meme zu sehen, oder? Und wenn Sie ein neues Meme auf der Registerkarte "Erstellung" erstellen und zur Registerkarte "Ansicht" gehen, finden Sie das neue Meme nicht? –

+0

Schließen, ja. Es gibt zwei Registerkarten: das erste für eine Tabellenansicht und das zweite für eine Sammlungsansicht. Der Meme-Generator wird über eine Navigationsleisten-Schaltfläche in jedem der Registerkarten aufgerufen. –

+0

Überprüfen Sie meine Antwort unter –

Antwort

3

Wenn Sie zwischen UITabBar Tabs navigieren, wird viewDidLoad nicht ausgelöst, es wird nur ausgelöst, sobald die Tab-Leiste erstellt wurde.

Damit die Tabellenansicht die Änderungen widerspiegelt, müssen Sie diese in viewWillAppear nicht in viewDidLoad behandeln.

So haben Sie:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    memes = appDelegate.memes 
} 

Und Sie werden eine Eigenschaft Beobachter memes wie folgt hinzufügen müssen:

var memes: [Meme]! { 
    didSet { 
     tableView.reloadData() 
    } 
} 

Edit: Wie @Andrea Mugnaini erwähnt, müssen Sie Verbinden Sie eine IBOutlet für Ihre Tabellenansicht:

@IBOutlet weak var tableView:UITableView! 
+0

Das ist richtig. Andrew muss auch anhängen '@IBOutlet var tableView: UITableView?' –

+0

Ahhhhhhh, das macht Sinn. Ich habe nicht bemerkt, dass viewDidLoad nur einmal aufgerufen wird. Ich dachte, es war jedes Mal, wenn die Ansicht geladen wurde. Ich schwinge gerade dabei. –

+0

Benötige ich ein IBOutlet, wenn ich die Datenquelle festlege und Referenzen im Storyboard delegiere? –

Verwandte Themen