Core Data - 如何在不将其添加到数据库的情况下创建 Core Data 对象的实例?
Core Data - How to create an Instance of Core Data object without adding it to the database?
我已经创建了 Core Data 数据库,它有一个名为 Item
的实体。
如果我想创建 Item
的实例并将其添加到数据库,我使用 Item(context: )
.
创建它
如何在不将 Item
添加到 Core Data 数据库的情况下创建 Item
实例?
我尝试过类似的操作,但是应用程序崩溃了,当我 运行 此代码时:
extension Item {
static var sampleItem: Item {
let sampleItem = Item()
sampleItem.timestamp = Date.now
return sampleItem
}
}
没有上下文(并且推而广之,没有与持久存储或托管对象模型的任何连接),核心数据无法确定对象的行为方式。
如果您对持久性或与任何实际对象的关系不感兴趣,那么您可以创建一个 in-memory 持久性存储,使用相同的托管对象模型,并在其中创建对象。这些对象也可用于单元测试和 SwiftUI 预览。
如果您对一次性但“真实”的对象感兴趣,这些对象将代表数据库中的真实事物及其关系,请创建一个子主队列上下文,其中包含您的主上下文的父级。然后您的数据库中的真实对象将可用,您可以对它们做任何您喜欢的事情。除非您保存子上下文,否则原始数据库将保持不变。
如果使用 init(entity:insertInto:)
创建实例,则可以执行此操作,因为上下文参数是可选的。这意味着您必须先查找实体描述。
您从托管对象上下文中获取描述,类似于
let itemEntity = NSEntityDescription.entity(forEntityName: "Item",
in: container.viewContext)!
然后你可以像这样创建一个实例:
let uninsertedItem = Item(entity: personEntity, insertInto:nil)
然后您可以使用 uninsertedItem
。稍后如果你想保存它,将它插入到上下文中:
container.viewContext.insert(uninsertedItem)
如果您不想保存它,请不要这样做,让该对象被释放。
我已经创建了 Core Data 数据库,它有一个名为 Item
的实体。
如果我想创建 Item
的实例并将其添加到数据库,我使用 Item(context: )
.
如何在不将 Item
添加到 Core Data 数据库的情况下创建 Item
实例?
我尝试过类似的操作,但是应用程序崩溃了,当我 运行 此代码时:
extension Item {
static var sampleItem: Item {
let sampleItem = Item()
sampleItem.timestamp = Date.now
return sampleItem
}
}
没有上下文(并且推而广之,没有与持久存储或托管对象模型的任何连接),核心数据无法确定对象的行为方式。
如果您对持久性或与任何实际对象的关系不感兴趣,那么您可以创建一个 in-memory 持久性存储,使用相同的托管对象模型,并在其中创建对象。这些对象也可用于单元测试和 SwiftUI 预览。
如果您对一次性但“真实”的对象感兴趣,这些对象将代表数据库中的真实事物及其关系,请创建一个子主队列上下文,其中包含您的主上下文的父级。然后您的数据库中的真实对象将可用,您可以对它们做任何您喜欢的事情。除非您保存子上下文,否则原始数据库将保持不变。
如果使用 init(entity:insertInto:)
创建实例,则可以执行此操作,因为上下文参数是可选的。这意味着您必须先查找实体描述。
您从托管对象上下文中获取描述,类似于
let itemEntity = NSEntityDescription.entity(forEntityName: "Item",
in: container.viewContext)!
然后你可以像这样创建一个实例:
let uninsertedItem = Item(entity: personEntity, insertInto:nil)
然后您可以使用 uninsertedItem
。稍后如果你想保存它,将它插入到上下文中:
container.viewContext.insert(uninsertedItem)
如果您不想保存它,请不要这样做,让该对象被释放。