如何解决为预览目的创建一个假的 NSManagedObjectContext?
我想要一个“假”预览 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 创建新的全局上下文
不确定这些选项中的哪一个是最好的,或者是否有我没有想到的更好的方法。谢谢:)
解决方法
我按照 Joakim Danielson 在评论中的建议在内存中创建了一个新的 PersistenceController,但是将它与我的其他上下文一起使用会导致崩溃和错误消息。然而,简单地创建一个新的 NSManagedObjectContext 效果很好。
它也没有保存到我的“真实”上下文中(Apple 文档):
对托管的更改 对象被保存在内存中,在相关的上下文中,直到 上下文被保存到一个或多个持久化存储区
let tempMoc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
用法
let person = Person(tempMoc,"Person Name")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。