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

时间:2017-03-21 23:50:54

标签: swift core-data

我一直很难找到将var保存到核心数据并将其拉出的正确方法,所以这就是我的方法。问题是因为我把它拉出并再次保存它有多个相同变量的保存,这导致它每次我想要保存时都会重复。有没有人有正确的方法来做这个?提前致谢

有一个按钮(saveButton)附加一个数组,并定义了两个附加到Core Data Entity类Person的变量(age)和(name)。然后将其保存在核心数据中。现在,在启动时,我会为Core Data中的每一个附加数组,并定义与之相关的每个变量。

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

    }
}

1 个答案:

答案 0 :(得分:0)

我不确定您希望这会如何运作,但您的viewDidLoad方法看起来很麻烦。

首先它是这样做的:

let results = try context.fetch(Person.fetchRequest())
let listItems = results as! [Person]

然后对listItems中的每个项目执行此操作:

list.append(NSEntityDescription.insertNewObject(forEntityName:"Person", into:context ) as! Person)

换句话说,您从Core Data中获取一些对象,然后立即为每一个创建重复的条目。

我无法弄清楚你想要在这里发生什么,但是现在听起来Core Data正在按照你的要求去做:为每个现有对象创建一个重复的实例。显而易见的解决方法是不要这样做,但真正的答案取决于你认为首先必要的原因。