2017-01-26 10 views
0

私は混乱しています。私はデータを表示するために動的なtableViewloadData()メソッドを持っています。ここでは基本的にJSONのデータをtableViewModelにロードします。UITableViewの混乱

override func viewDidDisappear(animated: Bool) { 
     super.viewDidDisappear(animated) 

     // To avoid duplication of data when the table updates or refreshes. 
     self.tableViewModel.removeAll(keepCapacity: false) 
    } 

を問題が解決されました:今、私は毎回私が実装されているテーブルの更新やリフレッシュを、データの重複を解消したいと思ってきました。今度は私の見解を変えてtableViewに戻ったら、index out of rangeというエラーが出ます。 self.tableViewModel.removeAllの後にtableViewを再ロードしようとしましたが、tableViewModelが空のため空のtableViewが再ロードされます。 self.tableViewModel.removeAllの後にloadData()と呼ぶと、データの複製が再開されます。

どうすれば解決できますか? viewDidDisappearviewDidAppearviewWillDisappearviewWillAppearのデータを複製せずにindex out rangeエラーから自分自身を守るにはどうすればよいですか?このたびloadData()がそのようにtableViewと呼ばれる新しいデータでのtableViewをリフレッシュされたのは何

func loadData() { 
     // To avoid duplication of data when the table updates or refreshes. 
     self.tableViewModel.removeAll(keepCapacity: false) 
     print("Table View Model Cleared: \(self.tableViewModel)”) 

     // Now load data from the internet. 
} 

:それはように私リットルoadData()方法にviewDidDisappearからself.tableViewModel.removeAll(keepCapacity: false)の場所を変更することによって、働いていた私にとっては

+0

'tableViewModel'のタイプは何ですか?作成したタイプの場合は、その定義方法を表示できますか?また、範囲外のものが原因で発生する可能性があるため、データソースメソッドを表示してください。 – Sweeper

+2

完全なエラーメッセージと 'UITableViewDataSource'デリゲートに関連するすべての関数を投稿できますか?どのようにデータをロードしますか?私があなたが言及した 'tableViewModel'が何であるかはよく分かりません。 問題はおそらく 'func tableView(UITableView、numberOfRowsInSection:Int)'または 'tableViewModel'にあります。 データが動的である場合は、 'viewWillAppear'でデータを準備する必要があります。データが修正された場合は、 'viewDidLoad'でデータを準備します。 –

+0

@Sweeper tableViewModelは、私が 'init(json:NSDictionary)'として定義した構造体です。すべてのデータソースメソッドを投稿したい場合は、ここに投稿する必要があります。しかし、私が知る限り、エラーはnumberOfRowsInSectionにある可能性があります。私はそれを実装しました:return tableViewModel.count。しかし、私は問題を解決しました。まだベストプラクティスがあれば、それはすばらしいでしょう。 – waseefakhtar

答えて

0

、古いデータを保持しておらず、新しいデータと複製しません。

これはまたfatal error: Index out of rangeから私をremoveAllとして保存し、読み込みデータは2つの別々の方法ではなく1つの方法で行われます。私はviewDidDisappearremoveAllを置いたとき、それはtableViewModel私は別のビューに切り替えると、スイッチバック時に、それがで迷子にしたいたびにきれいにしたい:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {  

     return tableViewModel.count 
    } 

私の意見では、fatal error: Index out of rangeがあることを教えてくれるtableViewの行数がtableViewModelの投稿数と一致しません。そしてそれはまさに我々がnumberOfRowsInSectionで返すものです。

どのような提案やベストプラクティスにも大変感謝します。また、私が間違っている場所で私を修正してください。

+0

通常、データソース 'var dataArray = Repositor.getXxxxxTableDataModel()'から配列を取得し、いくつかの変更が可能な場合は、このデータをロードデータの 'self.tableViewModel = dataArray'に設定することができます。 'removeAll'は必要ありません – muescha