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