gpt4 book ai didi

ios - 索引超出范围问题

转载 作者:行者123 更新时间:2023-11-28 15:05:39 26 4
gpt4 key购买 nike

我在一个表格 View 中显示了一些项目,如下所示...

enter image description here

如果点击 Add To Cart 按钮,单元格中的特定数据将显示在另一个 View 中,如下所示。

enter image description here

但在第一个表格 View 中,如果最后一个删除按钮(与名称 dddd 关联)被点击,那么它应该从第二个屏幕中删除。但是它崩溃说 index out of range 可能是因为在第二个屏幕中名称 dddd 的索引是 1 而在第一个屏幕中它的索引是 2。这是代码删除操作...

let context1 = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "CartProducts")

let sdf1 = newProdDetails[indexPath.row]
let dfg2 = sdf1.name

let predicate = NSPredicate(format: "name == %@", dfg2!)
request.predicate = predicate
request.fetchLimit = 1

do{
let count = try context1.count(for: request)
if(count == 0){
// no matching object
}
else{
// at least one matching object exists

context1.delete(self.cartDetails[indexPath.row] as NSManagedObject)
self.cartDetails.remove(at: indexPath.row) //crash occurs here
do {
try context1.save()
}
}
}catch let error as NSError { }

最佳答案

您的应用程序崩溃是因为您有两个数组 cartDetailsnewProdDetails 并且它们都有不同的索引。现在的情况是,不同数组中同一对象的索引不可能相同。

cartDetails 有两个项目 asd 在 0 和 ddd 在 1

同时newProdDetails 有三个项目 asd 为 0,fgh 为 1,ddd 为 2

现在想想 newProdDetailsdddindexPath.row 中是 2,如果你在 cartDetails 上搜索相同的索引> 没有找到 --> CRASH

建议:

首先使用 productID 字段而不是名称字段来获取像这样的对象(如果您的实体中没有它,请添加它)

let fetchRequest: NSFetchRequest< CartProducts> = CartProducts.fetchRequest()
fetchRequest.predicate = Predicate.init(format: "itemID==\(productID)")

// withID you will get in your object of `CartProducts`

if let result = try? context.fetch(fetchRequest) {
for object in result {
context.delete(object) // Always a single object if found
}
}

do {

try context.save() // <- remember to put this :)
// Here now you have to search `indexOf` of `ddd` to `cartDetails` and delete it.
} catch {
// Do something... fatalerror
}

这里是如何搜索索引的例子

if let index =   newProdDetails.index(where: { (object) -> Bool in
return (object["productID"] as! Int) == 1

}) {

}

希望对你有帮助

关于ios - 索引超出范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48500487/

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