2017-12-31 387 views
0

私はmemeジェネレータを構築しており、タブバービューコントローラの内部でmemeの作成を処理するビューコントローラを埋め込んでいます。最初のタブにはテーブルビューが表示され、アクティビティビューで保存されるとそのテーブルビューにmemesが表示されます。 App Delegateファイルにmemes配列を追加しました(これは議論の余地がありますが、この練習の必要条件です)。memeが保存され、アプリケーションデリゲートファイルに渡されたことを確認しました。テーブルビューのセルにApp Delegateから配列データを表示できません

ユーザーが新しいmemeを作成するたびに、保存したmemeのイメージとテキストをテーブルビューに表示します。ここに私が持っているものがあり、これは動作していません。

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! 
    } 

} 

どこが間違っていますか? cellForRowAtのプロセスはまだ新しく、私のためにイライラしています。 Hereはレポへのリンクです。

+0

メモ作成用に1つのタブがあります。作成されたmemesを表示するには、そうですか?そして、作成時に新しいmemeを作成して表示タブに移動すると、その新しいmemeは見つかりませんか? –

+0

閉じる、はい。 2つのタブがあります。最初は表ビュー用で、もう1つはコレクションビューを保持します。 memeジェネレータは、各タブ画面のナビゲーションバーボタンによって呼び出されています。 –

+0

私の答えを確認してください –

答えて

3

UITabBarタブの間を移動すると、viewDidLoadは起動されず、タブバーが作成されたときにのみトリガーされます。

テーブルビューに変更が反映されるようにするには、viewWillAppearviewDidLoadに入れないでください。

だからあなたが持っているでしょう:

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

をそして、あなたはこのようなmemesにプロパティオブザーバを追加する必要があります:

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

は編集:@Andrea Mugnainiで述べたように、あなたがする必要がありますIBOutletをテーブルビューに接続します。

@IBOutlet weak var tableView:UITableView! 
+0

これは正しいです。 Andrewも '@IBOutlet var tableView:UITableView? 'を添付する必要があります –

+0

Ahhhhhhh、意味があります。私はviewDidLoadが一度だけ呼び出されることに気付かなかった。私はそれがビューが読み込まれるたびにだと思った。私は今それを振り回しています。 –

+0

データソースを設定してストーリーボードに参照を委譲する場合、IBOutletが必要ですか? –