2017-12-31 206 views
0

나는 meme 생성자를 생성했으며 탭 뷰 컨트롤러의 내부에서 meme 생성을 처리하는 뷰 컨트롤러를 내장했습니다. 첫 번째 탭은 테이블 뷰를 표시하고 활동 뷰를 통해 저장되면 해당 테이블 뷰에 memes를 표시하려고 시도하고 있습니다. 내 App Delegate 파일에 memes 배열을 추가했다. (논쟁의 여지가 있지만이 연습의 요구 사항이다.) meme이 저장되고 app delegate 파일에 전달되었다는 것을 확인했다.테이블 뷰 셀에 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은 repo에 대한 링크입니다.

+0

그래서 밈 생성을위한 탭이 1 개 있고, 창조 된 밈을보기 위해, 그렇지? 그리고 생성 탭에 새로운 밈을 만들고보기 탭으로 이동하면 새로운 밈을 찾지 못합니까? –

+0

닫기, 예. 테이블보기의 첫 번째 탭과 컬렉션보기를 보유 할 두 번째 탭이 있습니다. 밈 생성기는 각 탭 화면의 탐색 모음 단추로 호출됩니다. –

+0

내 대답을 확인하십시오. –

답변

3

UITabBar 탭 사이를 탐색 할 때 viewDidLoad이 트리거되지 않으면 탭 표시 줄을 만든 후에 만 ​​트리거됩니다.

테이블보기에 변경 사항을 반영하려면 viewWillAppear이 아닌 viewDidLoad으로 처리해야합니다.

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이 필요합니까? –