2017-12-10 8 views
1

완전히 새로운 프로젝트에서 추가 코드없이 보통 table view이 있습니다. 내 스토리 보드에는 2 개의 뷰 컨트롤러가 있으며 은 First Controller에 삽입되어 있습니다. First Controller에는 단추 및 레이블이있는 테이블보기가 있습니다. 나는 seguecell 단추에서 스토리 보드의 두 번째 컨트롤러로 보냈습니다.테이블 뷰가 호출되지 않음

내가 알고 싶은 것은 내 deinit이 먼저 controller에 호출 될 때 호출되지 않는다는 것입니다. 나는 브레이크 포인트를 설정하고 아무것도 작동하지 않는 것 같습니다.

controllerpopped입니다 있기 때문에, second controller 작동 first-second에서 난 다시 segue

. 하지만 첫 번째 컨트롤러에서 deinit을 실행하기 위해해야 ​​할 일은 무엇입니까? pop 먼저 controller도 입력해야합니까? stack? 아니면 nil을 명시 적으로 지정해야합니까?

정확한 개념을 이해하도록 도와주세요. 이것에 대한 올바른 방향을 안내해주세요.

코드 - :

import UIKit 

class ViewController: UIViewController { 

    // CELL DATA ARRAY 

    var data = [0,0,0,0,0,0,0,0,0,0] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     // INITIALIZE total tap ARRAY WITH INDEX 0 
    } 

    deinit { 
     print("Deleted") 
    } 
} 

// TABLE VIEW METHODS 

extension ViewController:UITableViewDelegate,UITableViewDataSource{ 

    // NUMBER OF ROWS 
    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 
    // number of sections 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return data.count 
    } 

    // Cell for row 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     // deque cell 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell 
     cell.customLabel.text = "Total taps : \(String(data[indexPath.row]))" 
     // CALL BACK BUTTON 
     return cell 
    } 

} 

사용자 정의 셀 - :

import UIKit 

class CustomCell: UITableViewCell { 

    // Outlets 

    @IBOutlet weak var customCount: UIButton! 
    @IBOutlet weak var customLabel: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    // Cell button action 

    @IBAction func countTaps(_ sender: UIButton) { 

    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

} 

두 번째 컨트롤러 - : 당신이 푸시를 사용하는 경우

import UIKit 

class SecondViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    deinit { 
     print("denit") 
    } 
} 
+0

이 첫 번째보기 컨트롤러가 생성되는 방법을 표시하지 않습니다. 왜 첫 번째보기 컨트롤러가 사라지 길 원합니까? 앱이 사라지면 앱에서 남을 것입니다. –

+0

@ 의미 - 문제는 아무것도 알지 못하지만 테스트를 확인하고있었습니다. 이것이 가능한가, 아닌가? –

답변

2

가/뷰 컨트롤러를 제공, 첫 번째 뷰 컨트롤러 할당이 해제되지 않고 deinit이 호출되지 않습니다. 뷰 컨트롤러에 필요한 메모리 양은 무시할 만하지만, 메모리에 남아있는 것과 동일한 상태에서 메모리에 저장하는 이점은 중요합니다 (예를 들어, 두 번째보기 컨트롤러를 닫아 테이블로 돌아 가면 뷰 컨트롤러를 사용하면 이전과 완전히 똑같은 위치로 스크롤됩니다.

실제로 시스템은 표시되었지만 아직 팝/해제되지 않은 모든 뷰 컨트롤러의 계층 구조를 유지합니다. View Controller Hierarchy을 참조하십시오.

+0

답변 해 주셔서 감사합니다. :) –