gpt4 book ai didi

swift - tableView.deleteRows(在 :with:) crashed every time

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:35 27 4
gpt4 key购买 nike

当我尝试删除从 Core Data 的 NSManagedObject 派生的 Product 类型的对象时。可以成功移除该对象。但它在 tableView.deleteRows(at:with:) 行崩溃了。

所以,每次崩溃的时候,我再次打开应用程序,成功删除了对象,但我不知道为什么在tableView.deleteRows(at:with:)中崩溃了。

我该如何解决?

class ProductListInSection {
let sectionName: String
var productsInSection: [Product]

init?(sectionName: String, productInSection: [Product] ){
guard !sectionName.isEmpty else {
return nil
}
self.sectionName = sectionName
self.productsInSection = productInSection
}
}


var categorySections: [ProductListInSection]

// ...

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
let element = self.categorySections[indexPath.section].productsInSection[indexPath.row]
AppDelegate.viewContext.delete(element)
do {
try AppDelegate.viewContext.save() // successfully removed.
} catch {
print("Fail: \(error)")
return
}
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic) // crashed here.
}
}

错误信息如下:

2017-04-21 15:54:42.159 POS[20241:2852960] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/UITableView.m:1737

最佳答案

您忘记从数组中删除对象。在 productsInSection 上使用 remove(at:) 并从数组中删除对象,然后调用 deleteRows(at:with:)

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
let element = self.categorySections[indexPath.section].productsInSection[indexPath.row]
AppDelegate.viewContext.delete(element)
do {
try AppDelegate.viewContext.save() // successfully removed.
} catch {
print("Fail: \(error)")
return
}
//Remove the object from array
self.categorySections[indexPath.section].productsInSection.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic) // crashed here.
}
}

关于swift - tableView.deleteRows(在 :with:) crashed every time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com