我的应用程序中有一个食物日记,应该能够插入包含用户输入食物信息的行。每次我尝试我得到这个错误:''NSInternalInconsistencyException',原因:'尝试插入第3行到第0部分,但更新后的第0部分只有2行'“当尝试在tableView中插入行时出现NSInternalInconsistencyException
这是执行ViewController代码插入。
class FoodDiary: UITableViewController, AddRowDelegate {
var tableData = [[String: Any]]() //Datasource
func didAddRow(name: String, calories: String, section: Int) {
let getName = ["name":name, "calories":calories] as [String: Any]
tableData.append(getName)
let indexPath = IndexPath(row: tableData.count + 1, section: section)
tableView.insertRows(at: [indexPath], with: .automatic)
calsforToday.text = calories
tableView.reloadData()
}
这是我的其他ViewController,显示用户何时用协议方法输入数据。
protocol AddRowDelegate {
func didAddRow(name : String, calories : String, section : Int)
}
class PopupVC: UIViewController {
var delegate: AddRowDelegate?
var section: Int?
@IBOutlet weak var foodTimeLabel: UILabel!
@IBOutlet weak var foodPopup2: UIView!
@IBOutlet weak var foodPopUp: UIView!
@IBOutlet weak var inputFood: UITextField!
@IBOutlet weak var inputCals: UITextField!
@IBAction func saveToDiary(_ sender: Any) {
delegate?.didAddRow(name: inputFood.text!, calories: inputCals.text!, section: section!)
dismiss(animated: true, completion: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "diaryEntry" {
if let selectedIndexPath =
tableView.indexPathForSelectedRow?.first{
let popVC = segue.destination as! PopupVC
popVC.delegate = self
if selectedIndexPath == 0 {
let label = "Add Breakfast"
popVC.foodLabel = label
popVC.section = 0
这两个VC的照片。
我怎样才能获得该行与信息插入用户输入?
'tableData.count + 1'应该是'tableData.count - 1' – dan
不工作。显示如下:''NSInternalInconsistencyException',原因:'无效更新:第1节中的行数无效。更新(2)后现有节中包含的行数必须等于该节前包含的行数更新(1),加上或减去从该部分插入或删除的行数(插入0,删除0),加上或减去移入或移出该部分的行数(移入0,移出0) ''@dan – thelegendary3