我试图在保存核心数据上下文时附加 NSManagedObject 数组。 为此,我使用以下代码
func startme(){
let managedContext = appDelegate.managedObjectContext!
let forquestions = NSEntityDescription.entityForName("Questions", inManagedObjectContext: managedContext)
let abc = NSManagedObject(entity: forquestions!, insertIntoManagedObjectContext: managedContext)
for lines in linesmain["start"]! {
abc.setValue(lines, forKey:"question")
myDataArray.append([abc])
}
do {
try managedContext.save()
}
catch {
print("Could not save \(error)") }
}
不幸的是,我没有在 myDataArray 中获取三个不同的对象 - 我只是得到了三个像这样的重复项
[[ (entity: Questions; id: 0x7f8761dac300 ; data: { question = "hi I'm row 1"; })],
[ (entity: Questions; id: 0x7f8761dac300 ; data: { question = "hi I'm row 1"; })],
[ (entity: Questions; id: 0x7f8761dac300 ; data: { question = "hi I'm row 1"; })]]
当我尝试在循环内添加 print(myDataArray)
时 - 它会打印三个不同的对象,这非常好。
我不知道为什么 for 循环对于 NSManagedObject 数组不能很好地工作。 期待您的见解。
谢谢。
最佳答案
你只创建了一个 NSManaged 对象,用这一行:
let abc = NSManagedObject(entity: forquestions!, insertIntoManagedObjectContext: managedContext)
您的 for 循环然后设置其属性之一并将其附加到您的数组。每次通过时,循环都作用于完全相同的 NSManagedObject。不是副本。所以同一个对象最终出现在你的数组中 3 次。当您在末尾打印 ln 时,所有三个元素都是相同的:相同的 ID 和相同的 question
。如果您在 for 循环中 println,则 id 应该全部相同,但每次迭代都应显示问题的“当前”值。如果你想要三个不同的 NSManagedObjects,只需将上面的行移动到 for 循环中。每次循环都会创建并添加一个新的、不同的 NSManagedObject。
还有一点需要注意:您要附加 [abc]
,它是一个包含 NSManagedObject 的数组,而不是 NSManagedObject 本身。因此 myDataArray 最终成为 NSManagedObjects 数组的数组。我怀疑你实际上想要:
myDataArray.append(abc)
关于ios - NSManagedObject 循环返回重复项 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32520790/