gpt4 book ai didi

ios - 更新表格 View 中的条目(编辑后)并在表格 View 中显示时出现问题

转载 作者:行者123 更新时间:2023-11-30 12:08:31 25 4
gpt4 key购买 nike

这是我的场景...单击右上角(导航栏)的加号按钮时,会出现一个带有文本字段的警报 View ,我在文本字段中添加一些数据,然后按“确定”按钮。这会导致文本字段中的数据显示在 TableView 上,并且也存储在 core-data 中。

然后,当我单击现在包含警报 View 文本字段中的数据的行时,我会转到另一个要编辑的 View 。该viewcontroller有一个文本字段,其中包含前一屏幕行中的值。现在,我单击文本字段并编辑其值,然后按右上角的“保存”。现在,理想情况下,当我按“保存”并转到上一个屏幕时,编辑后的值现在应该在表格 View 上看到,而不是旧值。

但是发生的情况是,当我按“保存”并返回到上一个屏幕时,我暂时会在 tableviewcontroller 中看到更新后的值。但实际上,该值在 core-data 中添加了两次,当我从这个 tableview 返回到另一个 View 并返回到它时,我不仅看到编辑之前存在的值而且新编辑的值也被添加了两次!我无法理解这种行为......

单击编辑屏幕中的“保存”按钮后,这就是我正在做的事情...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "save" {
editedModel = editTextField.text
}
}

返回 TableView 屏幕后,这就是我正在做的事情...(在 tableviewcontroller 屏幕中)

@IBAction func saveToMainEditViewController (segue:UIStoryboardSegue) {
let detailViewController = segue.source as! EditCategoriesTableViewController
let index = detailViewController.index
let modelString = detailViewController.editedModel //Edited model has the edited string

let myCategory1 = Category(context: self.context)
myCategory1.categoryName = modelString
mangObjArr[index!] = myCategory1

//Saving to CoreData
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Category", in: managedContext)
let category = NSManagedObject(entity: entity!, insertInto: managedContext)

category.setValue(myCategory1.categoryName, forKeyPath: "categoryName")
category.setValue(myCategory1.categoryId, forKey: "categoryId")
do {

try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
categoryTableView.reloadData()

}

在 cellForRowAtIndexPath 中,这就是我正在做的事情......

    let cell = tableView.dequeueReusableCell(withIdentifier: "categoryCell", for: indexPath)

let person = mangObjArr[indexPath.row]
cell.textLabel?.text = person.categoryName
return cell

最佳答案

您正在插入一条新记录而不是更新前一条记录
在类别实体上进行任何插入之前,编写一段代码来获取具有当前名称的记录,然后用编辑后的字符串替换其当前名称,然后保存它。
此代码获取旧名称的记录并将其名称替换为新名称

let fetchRequest : NSFetchRequest<Category> = Category.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "(categoryName == %@)", argumentArray: [*Your current categoryName*])
do {
let result = try managedContext.fetch(fetchRequest)
if let toBeUpdatedRecord = result.first
{
toBeUpdatedRecord.categoryName = newName
//here you should save
}
} catch{}

关于ios - 更新表格 View 中的条目(编辑后)并在表格 View 中显示时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378250/

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