2017-12-10 7 views
1

全く新しいプロジェクトで、余分なコードなしで普通のtable viewがあります。私のストーリーボードには、2つのビューコントローラーと、がFirst Controllerに埋め込まれています。 First Controllerには、ボタンとラベル付きのテーブルビューがあります。私はseguecellからストーリーボードの2番目のコントローラーに割り当てました。テーブルビューが呼び出されていない

私が知りたいのは、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 
    } 

} 

第二Controller-:

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

この最初のビューコントローラの作成方法は表示されません。なぜ、この最初のView Controllerを消してしまいたいのですか?それがなくなったらあなたのアプリから何が残されますか? –

+0

@意味が分からないことは分かっていますが、テストをチェックしていました。これは可能かどうか? –

答えて

2

あなたはプッシュを使用する場合/ビューコントローラ、最初のビューコントローラを発表割り当てが解除されず、deinitが呼び出されません。ビューコントローラに必要なメモリ量はごくわずかですが、メモリに残した状態と同じ状態でメモリに保存することのメリットがあります(例では、2番目のビューコントローラを閉じてテーブルに戻すとそれが以前とまったく同じ場所にスクロールされていることを確認します)。

実際、表示されていてまだポップ/ディスマウントされていないすべてのView Controllerの階層がシステムによって保持されています。 View Controller Hierarchyを参照してください。

+0

答えをありがとう。 :) –

関連する問題