gpt4 book ai didi

ios - NSManagedObject 循环返回重复项 Swift

转载 作者:行者123 更新时间:2023-11-29 01:39:56 26 4
gpt4 key购买 nike

我试图在保存核心数据上下文时附加 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com