我想要一个"以预览NSManagedObject
显示为例。但是,我不想让它扰乱我的常规上下文。以下是我认为可行的方法:
-
创建一个新的
NSManagedObjectContext
并将预览NSManagedObject
存储在那里let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType) let person = Person(moc, "Person Name")
在这种情况下,新的上下文发生了什么?如果没有调用
save()
并且视图被删除,它会慢慢地填充存储还是会被删除? -
在离开视图时删除新创建的
NSManagedObject
SomeView() .onDisappear() { moc.delete(person) PersistenceController.shared.save() }
如果
.onDisappear()
函数没有被调用,这可能无法工作,例如当用户离开应用程序时,特定的视图仍然打开。 -
将假预览
NSMangagedObject
添加到常规上下文中并将其过滤掉(可能是最糟糕的主意) -
为假
NSManagedObject
s创建一个新的全局上下文
不确定这些选项中哪个是最好的,或者是否有更好的方法我没有想到。谢谢:)
我在内存中创建了一个新的PersistenceController,正如Joakim Danielson在评论中建议的那样,但是将它与其他上下文一起使用会导致崩溃和错误消息。然而,简单地创建一个新的NSManagedObjectContext就可以了。
没有保存到我的"real"上下文,要么(Apple文档):
变更管理对象保存在内存中,在相关的上下文中,直到上下文保存到一个或多个持久存储
let tempMoc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
使用
let person = Person(tempMoc, "Person Name")