2017-08-31 7 views
1

配列にデータを正しく追加していますが、データを挿入して表示していません。UITableViewswift3のテーブルビューにセクションとして行を挿入したい

しかし、次のエラーがキャッチされない例外により 「NSInternalInconsistencyException」にアプリを終了

を示し、理由:セクション0に行4 を挿入する「試みが、セクション0でのみ0行が後にあります私はこのように試してみました

更新」:

 super.viewDidLoad() 

    array1=["A1","B1","C1","D1"] 
    array2=["A2","B2","C2","D2"] 
    array3=["A3","B3","C3","D3"] 
    array4=["A4","B4","C4","D4"] 
    dict1=[0:array1,1:array2,3:array3,4:array4,2:names] 
    print((dict1)) 
    print((dict1[1]?.count)!) 
    print(dict1.keys.count) 

} 
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

{ 
    return (((dict1)[section])!.count) 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    if tableView == tableExplore { 

    cellMain = tableView.dequeueReusableCell(withIdentifier:"cellExp", for: indexPath) as! ExploreLocallyCell 
    cellMain.textLabel?.textColor = UIColor(red: 194.0/255, green: 198.0/255, blue: 198.0/255, alpha: 1.0) 
     cellMain.textLabel?.text=(dict1[indexPath.section])?[indexPath.row] 
    } 
    return cellMain 

} 
public func numberOfSections(in tableView: UITableView) -> Int // Default is 1 if not implemented 
{ 


return dict1.keys.count 
} 
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
{ 
    return (names)[section] 

} 

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    self.insert(section:indexPath.section, row: indexPath.row) 

} 
func insert(section:Int,row:Int) 
{ 
    print(dict1[section]!) 
    // Update Table Data 
    tableView.beginUpdates() 
dict1[section]!.append("BAlu") 
    print(dict1[section]!) 
    tableView.insertRows(at: [IndexPath(row:dict1[section]!.count-1, section: section)], with: .automatic) 
    tableView.endUpdates() 
    tableView.reloadData() 

} 

答えて

0
// No need of tableView.beginUpdates() and tableView.endUpdates() while you need to do one or two modification in UITableView 
// While you are inserting row in table programatically then no need of tableView.reloadData() because its has no meaning to do it. You should either insert or reload. It will give you same result. Diff is reload will take more performs time then insert row. 

func insert(section:Int,row:Int) 
{ 
    print(dict1[section]!) 
    // Update Table Data 
    dict1[section]!.append("BAlu") 
    print(dict1[section]!) 
    tableView.insertRows(at: [IndexPath(row:dict1[section]!.count-1, section: section)], with: .automatic) 
} 

//Or 
func insert(section:Int,row:Int) 
{ 
    print(dict1[section]!) 
    // Update Table Data 
    dict1[section]!.append("BAlu") 
    print(dict1[section]!) 
    tableView.reloadData() 
} 
関連する問題