2017-06-29 2 views
0

私は条件を付けてデータを整理しようとしていますので、テーブルに表示できます。私の条件はAllData.countは4に等しくなければならないということです。そして、それが4に等しいときでも、私のデータは私の新しい配列に追加されませんか? 誰かが間違っていることを教えてもらえますか?文がパブリック関数で動作しない場合は? [Swift 3.0 - Xcode]

var AllData = [String]() 
var DataTable = [String]() 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") 
    if AllData.count == 4 { 
     DataTable.append(contentsOf: AllData) 
     print("appended") 
    } 

    for i in stride(from: 0, to: DataTable.count - 1, by: 4) { 
     cell.textLabel?.text = DataTable[i] 
    } 

    return cell 
} 

override func viewDidLoad(){ 
    print("AllData count ------->",AllData.count) 
    print("Datatable count---------->",DataTable.count) 
    super.viewDidLoad() 
} 

出力:あなたのテーブルビューには何も見ることができない場合は、 ALLDATA回数-------> 4 のDataTableのカウント---------->は0

答えて

0

ファーストデリゲートとデータソースが正しく設定されているかどうかをviewDidLoadに確認してください。このよう

override func viewDidLoad(){ 
    self.tableView.delegate = self 
    self.tableView.dataSource = self 
} 

viewDidLoadcellForRowAt前に終了しました。ログAllData count -------> 4 Datatable count----------> 0が正しいようです。

ただし、cellForRowAtに何か問題があります。 AllDataに4つの要素がある場合は、AllDataのすべてをDataTableに追加してください。その後、DataTableをループし、UILabelに値を割り当てますか?この方法では、ラベルには最後の要素のデータ(DataTable)のみが含まれます。さらに、セルが準備されるたびにcellForRowが呼び出されます。したがって、2番目のセルについては、DataTableは同じデータをAllDataに2回入れて、ループでは最後のラベルを割り当てます。これ以上のコードで、あなたがあなたのAllData配列から最後の要素を表示し、各セルにラベルを付けますテーブルビューが表示されるように

+0

'AllData'は他のVCの関数からソートされた変数を含む配列であり、最初のエントリと5番目のエントリ(したがって4のストライド)はすべて、表。ですから、すべての関数が実行されるたびに(AllDataには4つの値がすべて含まれているため)、これらの変数は 'DataTable'に追加され、適切なタイトルがテーブルに表示されます。そして、すべての関数が再び実行され、さらに4つの値が得られると、別のタイトルがテーブルに表示されます。私はあなたの言うことを理解していますが、テーブルの上に何も表示されません。 –

+0

@ Dan.code更新された回答を確認してください。データソースを設定して委任することを忘れないでください:/ –

0

問題は、細胞がdequeuedはので、あなたのロジックがしかときに発生するされているときにcellForRowAt:indexPathにのみ呼び出されることです画面が最初にロードされたとき、またはtableViewをスクロールしているとき。代わりに、AllDataappendedになるたびに呼び出されるfunc updateDataSource()を作成します。 tableViewDataSourceを更新すると、tableViewに新しいセルが追加されますので、ループの内部でに電話する必要があります。それが単に動作しない場合tableView.reloadData()

関連する問題