为什么我们需要电话的上下文。删除删除一个项目从十分整洁阵?

0

的问题

假设我有;

var itemArray = [Item]()

和项目是一个十分整洁. 项目有两个属性"标题":String和"完成":布尔。 这里是图片的我的数据模型。

enter image description here

//  Item+CoreDataClass.swift

//  This file was automatically generated and should not be edited.
//

 import Foundation
 import CoreData

 public class Item: NSManagedObject {

 }

当我改变的价值做,并呼吁环境。保存,它是将自动反映持久性的容器中。 然而,当我删除一个元件阵列:

itemArray.remove(at: someindex)

并叫上下文。保存。 该项目未被删除持久性的容器中。 只有如果我打电话,

context.delete(itemArray[someindex])

然后,该项目是真正从中删除储存。

那么,为什么只从itemArray和保存方面是不足够的,虽然改变的一个属性的价值和节省的上下文是足够的成功。操作上的核心数据?

core-data ios swift
2021-11-23 12:52:23
3

最好的答案

1

当你改变一个属性,在一个项目则的核心数据(实际上NSManagedObjectContext)检测到,因为该项目属于NSManagedObjectContext和项目被标记为肮脏的。 但你的阵列没有连接到NSManagedObjectContext以任何方式这样做的任何更改它仍然未被发现的NSManagedObjectContext,这就是为什么你需要告诉它明确表示,要删除的项目,你从阵列。

另一种方法,来看看它是什么你的建立/界定在自己的核心数据的模型是已知的NSManagedObjectContext但任何东西之外创建swift代码是未知的。 如果你开始的工作带来许多实体之间的关系,你会看见,然后添加或删除的对象,从对许多集会直接处理由NSManagedObjectContext的方式预计为你的阵列。

2021-11-24 12:13:31
1

阵列 var itemArray = [Item]() 没有直接关系的基础的数据库。 因此删除的项目,列不影响核心数据的数据库。

创造、保存或删除十分整洁的实例中的一个核心的数据数据库,需要调相关的职能的一个有效的NSManagedObjectContext.

2021-11-23 13:15:17
1

任何操作上CoreData应该通过 NSManagedObjectContext 因为它是暂访问或更新任何实体的数据库。 所以你的情况,同时删除的 Item 实体,应通过下文只得到反映在数据库。

var itemArray = [Item]()
let context = //get your context
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Item")
let predicate = NSPredicate(format: " (primaryKey == %@) ", "your_primary_key")
fetchRequest.predicate = predicate
itemArray = try! context.fetch(fetchRequest)
for i in 0 ..< itemArray.count where i < itemArray.count-1 {
    context.delete(itemArray[i])
}

do {
    try context.save()
} catch {
    // print the error
}
2021-11-23 14:54:08

我想知道为什么更新的呼叫直接反映在CoreData基础。
Akif

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................