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