我一直很难找到将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")
}
}
答案 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正在按照你的要求去做:为每个现有对象创建一个重复的实例。显而易见的解决方法是不要这样做,但真正的答案取决于你认为首先必要的原因。