ios - NSManagedObject 循环返回重复项 Swift

标签 ios uitableview for-loop core-data

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

相关文章:

ios - POI跟踪越野

json - 从关闭的应用程序发送有关新 JSON 数据的本地通知? | swift

ios - 如何测量 UITableViewCell 的加载时间?

python - 如何打破 Python 中的嵌套 for 循环?

ios - 在iOS 7中删除UITableView的多余分隔符

ios - 有关SDK版本问题(xcode 10.1)的操作警告

ios - 如何在输入最少字符后显示搜索结果表?

python - 列表中的编号重合

python - 使用 For 循环修改 Pandas 中的 DataFrame 字典

ios - 无需在 Swift 中创建附加类即可解码嵌套数据