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



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

有一个按钮 (saveButton( 附加一个数组并定义附加到核心数据实体类 Person 的两个变量(年龄(和(名称(。然后,它将其保存在核心数据中。现在,在启动时,我为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")
    }
}

我不确定您希望这将如何工作,但您的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正在做你告诉它做的事情:为每个现有对象创建一个重复的实例。显而易见的解决方法是不要这样做,但真正的答案取决于您为什么首先认为这是必要的。

最新更新