2016-10-26 11 views
0

UITableViewから削除しようとするとエラーが発生します。私のTableViewはCoreDataのものです。ここに私のコードです。UITableViewから行を削除するときのエラー

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if (editingStyle == UITableViewCellEditingStyle.delete) { 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     let context = appDelegate.persistentContainer.viewContext 

     context.delete(mealCore[indexPath.row]) 
     appDelegate.saveContext() 
     print("context saved") 
     tableView.deleteRows(at: [indexPath], with: .fade) 
    } 
} 

私のコンテキストが保存されています。しかし、テーブルビューから削除しようとすると、次のエラーでクラッシュします。

無効な更新:セクション0の行数が無効です。更新後の既存のセクションに含まれる行数(5)更新(5)の前にそのセクションに含まれる行の数に、そのセクション(挿入された0、削除された1)に挿入または削除された行の数をプラスまたはマイナスし、 (0は移動し、0は移動しました)。

本当にありがとうございます。ありがとう!!!

役立つ可能性のあるコードを追加するだけですか? > UITableViewCellの{

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomTableViewCell 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat="dd/mm/yyyy" 


    let mealRec = mealCore[indexPath.row] 

    cell.mealName!.text = mealRec.value(forKey: "meal") as? String 

    if let dateHolder = mealRec.value(forKey: "mealdate"){ 

     cell.mealDate.text = dateFormatter.string(from: dateHolder as! Date) 
    } 
    if let data = mealRec.value(forKey: "mealimage")as? NSData { 
     cell.mealImage?.image = UIImage(data: data as Data) 
    } 

    return cell 

} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    let managedContext = appDelegate.persistentContainer.viewContext 

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"FoodLog") 

    do { 
     let results = try managedContext.fetch(fetchRequest) 
     mealCore = results as! [NSManagedObject] 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 
} 

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

    return mealCore.count 
} 
+0

テーブルビューのデータソースとしてNSFetchedResultsControllerを使用していますか? [NSFetchedResultsController:1行を削除するとアプリケーションがクラッシュする](http://stackoverflow.com/questions/21222840/nsfetchedresultscontroller-delete-1rowrowcrashes-the-app)を比較してください。 –

+0

こんにちはマーティン、NSFetchRequest を使用しています – iceman

+0

「セクションの行数」と「インデックスパスの行のセル」を表示します。 –

答えて

2

mealCoreアレイからオブジェクトを削除する必要があります。

mealCore.remove(atIndex: indexPath.row) 
+0

すごくうまくいきました!!おかげでトリック14 !!皆さんの提案に感謝したいと思います! – iceman

-1

とても似beginUpdatesendUpdatesへの呼び出しを作ってみましょう:

- VAR mealCore = NSManagedObject 公共のfuncのtableView(IndexPath _のtableView:::のUITableView、cellForRowAt indexPath)私が何か間違ったことかもしれません
tableView.beginUpdates() 
tableView.deleteRows(at: [indexPath], with: .fade) 
tableView.endUpdates() 
+0

1つの更新でどのような違いがありますか? –

+0

私はいつも問題を解決しているようですが、はい、私はそれがあなたと同じくらい謎であることに同意します。 –

+0

こんにちはjacob、ありがとう!試してみましたが、うまくいきませんでした:( – iceman

関連する問題