2017-08-31 40 views
1

我正在成功追加數據,但UITableView未插入並顯示該數據。我想在swift3中的tableview中插入行作爲段落

但下面的錯誤顯示

終止應用程序由於未捕獲的異常 「NSInternalInconsistencyException」,理由是:「試圖插入一行4 成段0,但之後只有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() 
}