gpt4 book ai didi

ios - 更新 CoreData 中的记录时出现问题

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

我确实浏览了处理此问题的其他帖子。但我找不到太多关于我的问题的信息。希望有人能帮忙。我的问题是...我有一条已编辑的记录,我想在我的 tableview 中显示它。为此,我也想更新 Core-Data 中的该条目。我不知道如何做到这一点。

这就是我将编辑后的数据引入表格 View 并保存在核心数据中的方式。更新必须在两者之间的某个地方完成,但我无法弄清楚到底如何以及在哪里......?

@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)")
}

}

最佳答案

步骤:

  1. 了解基本概念
  2. 获取记录
  3. 更新记录
  4. 保存上下文

概念:

  • 这只是一个粗略的解释,正确的解释在下面的链接中。
  • 虽然比较耗时,但请引用下面的链接,它会帮助你了解CoreData。如果你不理解的话,以后会遇到很多问题。

实体:

  • 在核心数据模型中,您可以创建实体,即表。

托管对象:

  • 这是实体的类表示
  • 此类的每个实例都代表表中的一行。

托管对象上下文:

  • 将托管对象上下文想象成一张纸/便签本
  • 托管对象是在特定托管对象上下文中创建/更新/删除的。
  • 您可以保存/放弃对托管对象上下文所做的更改。

非线程安全:

  • 当您对托管对象上下文执行任何操作时,请确保在 context.performAndWait { } 内使用。这将确保上下文操作在上下文的队列(线程)上执行。

获取并更新:

func fetch() {

let request : NSFetchRequest< Category> = Category.fetchRequest()

//Predicate builds the where clause to filter records
//This is a sample, so edit based on your requirement
request.predicate = NSPredicate(format: "categoryID = %@", argumentArray: [10])

context.performAndWait {

do {
let categories = try context.fetch(request)

//Update
for category in categories {
category.name = "aaa"
}
}
catch {
print("error = \(error)")
}
}
}

保存:

func save() {

if context.hasChanges {

context.performAndWait {

do {
context.save()
}
catch {
print("Save error: \(error)")
}
}
}
}

引用:

关于ios - 更新 CoreData 中的记录时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46379146/

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