Core data 如何处理上下文?

Core data 如何处理上下文?,core-data,Core Data,我的应用程序在核心数据上有一种奇怪的行为。我有一个应用程序,用户可以通过翻译创建自己的单词条目。删除所有核心数据时,我检查了项目的nb,结果为0。当添加后面的4个项目时,项目的nb为5??我在大量测试后发现了这个问题,对我来说似乎不一致:问题在于以下代码: fileprivate func duplicateCheckAndImport() { // Check for duplicates do { self.words = try conte

我的应用程序在核心数据上有一种奇怪的行为。我有一个应用程序,用户可以通过翻译创建自己的单词条目。删除所有核心数据时,我检查了项目的nb,结果为0。当添加后面的4个项目时,项目的nb为5??我在大量测试后发现了这个问题,对我来说似乎不一致:问题在于以下代码:

fileprivate func duplicateCheckAndImport() {
    // Check for duplicates
    do {
        
        self.words = try context.fetch(Word.fetchRequest())   // grab all Words
        let nbOfWords = words!.count
        print ("The nb of words in duplicateCheck...: \(nbOfWords ?? 0)")
        
    }
        
    catch {
        // error message to add
    }

    let newWord = Word(context: self.context)

    do {
        self.words = try context.fetch(Word.fetchRequest())   // grab all Words
        let nbOfWords = words!.count
        print ("The nb of words in duplicateCheck...: \(nbOfWords ?? 0)")
        
    }
        
    catch {
        // error message to add
    }
两次打印的结果是,第一次抓取的结果是0,第二次抓取的结果是1,这意味着只有这行代码->let newWord=Word(context:self.context)在核心数据中添加了一个条目,但我的目的只是获取上下文,然后像这样添加单词:

      let newWord = Word(context: self.context)
      newWord.name = item.name.trimmingCharacters(in: .whitespaces)
      newWord.definition = item.definition.trimmingCharacters(in: .whitespaces)

有人能给我解释一下吗?

你提到的那行代码

let newWord = Word(context: self.context)
…创建一个新实例。这就是
Word(context:self.context)
所做的——它说,使用传入的上下文创建
Word
的新实例

从您提供的代码中,很难准确地说出您正在尝试做的不会创建新实例的事情。您的变量称为
newWord
,这表明您确实想创建一个新的
Word
,这就是正在发生的事情

更新:如果不需要新实例,可以像删除任何其他托管对象一样删除它。因此,如果您不想要
新词
,您可以

context.delete(newWord)

然后保存更改。还有其他方法,但这是最简单的。

好的,谢谢汤姆!是的,我想在CoreData中添加新词,并在保存之前要求用户验证。如果用户回答“否”,我如何取消此实例,我找不到正确的命令,就好像我创建了一个新条目一样,他将添加旧的(已取消的单词)和新单词?@Dude1313 Updated