Swift 核心数据重复保存相同的变量

Swift 核心数据重复保存相同的变量,swift,core-data,Swift,Core Data,我一直很难找到合适的方法将var保存到核心数据中并将其取出,所以我就是这样做的。问题是,因为我已将其拉出并再次保存,所以它对同一变量有多个保存,这导致每次我要保存时它都会重复。有人对正确的方法有什么建议吗?提前谢谢 有一个按钮(saveButton)附加一个数组,并定义附加到核心数据实体类Person的两个变量(年龄)和(名称)。然后将其保存在核心数据中。现在,在启动时,我为核心数据中的每一个添加数组,并定义附加的每个变量 var list = [Person]() @IBAction fun

我一直很难找到合适的方法将var保存到核心数据中并将其取出,所以我就是这样做的。问题是,因为我已将其拉出并再次保存,所以它对同一变量有多个保存,这导致每次我要保存时它都会重复。有人对正确的方法有什么建议吗?提前谢谢

有一个按钮(saveButton)附加一个数组,并定义附加到核心数据实体类Person的两个变量(年龄)和(名称)。然后将其保存在核心数据中。现在,在启动时,我为核心数据中的每一个添加数组,并定义附加的每个变量

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。