Swift 核心数据重复保存相同的变量
我一直很难找到合适的方法将var保存到核心数据中并将其取出,所以我就是这样做的。问题是,因为我已将其拉出并再次保存,所以它对同一变量有多个保存,这导致每次我要保存时它都会重复。有人对正确的方法有什么建议吗?提前谢谢 有一个按钮(saveButton)附加一个数组,并定义附加到核心数据实体类Person的两个变量(年龄)和(名称)。然后将其保存在核心数据中。现在,在启动时,我为核心数据中的每一个添加数组,并定义附加的每个变量Swift 核心数据重复保存相同的变量,swift,core-data,Swift,Core Data,我一直很难找到合适的方法将var保存到核心数据中并将其取出,所以我就是这样做的。问题是,因为我已将其拉出并再次保存,所以它对同一变量有多个保存,这导致每次我要保存时它都会重复。有人对正确的方法有什么建议吗?提前谢谢 有一个按钮(saveButton)附加一个数组,并定义附加到核心数据实体类Person的两个变量(年龄)和(名称)。然后将其保存在核心数据中。现在,在启动时,我为核心数据中的每一个添加数组,并定义附加的每个变量 var list = [Person]() @IBAction fun
var list = [Person]()
@IBAction func saveButton(_ sender: Any)
{
list.append(NSEntityDescription.insertNewObject(forEntityName:"Person", into:context ) as! Person)
list[list.count-1].age = Int16(ageTF.text!)!
list[list.count-1].name = nameTF.text
appDelegate.saveContext()
}
@IBAction func printList(_ sender: Any)
{
for index in 0...list.count-1
{
print("Name of person # \(index) = \(list[index].name!)")
print("Age of person # \(index) = \(list[index].age)")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
do {
let results = try context.fetch(Person.fetchRequest())
let listItems = results as! [Person]
for lists in listItems
{
print(lists.age)
print(lists.name!)
list.append(NSEntityDescription.insertNewObject(forEntityName:"Person", into:context ) as! Person)
list[list.count-1].age = lists.age
list[list.count-1].name = lists.name
}
}
catch {
print("Error")
}
}
我不确定您希望如何实现这一点,但您的
viewDidLoad
方法看起来很麻烦
首先,它是这样做的:
let results = try context.fetch(Person.fetchRequest())
let listItems = results as! [Person]
list.append(NSEntityDescription.insertNewObject(forEntityName:"Person", into:context ) as! Person)
然后对listItems
中的每个项目执行以下操作:
let results = try context.fetch(Person.fetchRequest())
let listItems = results as! [Person]
list.append(NSEntityDescription.insertNewObject(forEntityName:"Person", into:context ) as! Person)
换句话说,从核心数据中获取一些对象,然后立即为每个对象创建重复条目
我不知道您希望在这里发生什么,但现在听起来核心数据正在做您让它做的事情:为每个现有对象创建一个重复实例。显而易见的解决办法是不要这样做,但真正的答案取决于你为什么认为这在第一时间是必要的。我从来没有说过它没有做我告诉它做的事情,我说我不确定正确的方法,这是我得到的最接近的答案,因为似乎没有关于这方面的实际教程。你在节省,你在获取。看起来不错。出于某种原因,您编写了创建重复项的代码。我不知道您打算用这行代码完成什么,所以我无法告诉您如何修复它。我正在尝试检索与核心数据一起保存的数据,并将其放回应用程序Startup上的原始数组。您可以通过更改managedObject的属性并在上下文中调用save()来更新managedObject。