繁体   English   中英

想要保存核心数据,但“扩展不得包含存储的属性”

[英]Want to save Core Data but “Extensions must not contain stored properties”

我有一个名为“CloudPage”的核心数据 class,并在我的代码中添加了一个扩展:

extension CloudPage:GalleryItem {
    // bunch of methods defined here
    func someFunc() -> Bool {
        return true
    }

扩展此 class 以使所有 model 信息都驻留在此处对我来说是有意义的。 我还认为这个 class 知道如何保存自己的实例是有意义的,所以我将我的 viewcontext 添加到它:

extension CloudPage:GalleryItem {
    @Environment(\.managedObjectContext) private var viewContext

// ...some code...

但是现在 swift 说“扩展不得包含存储的属性”。 有一个更好的方法吗? 我认为所有保存逻辑都应该驻留在这个 model 上。

正如编译器已经说过的那样,不允许在 Extension 中添加存储的属性。 CloudPage是一个NSManagedObject ,这意味着它已经由 CoreData 管理。

无论如何,这不是您使用 CoreData 对象的方式。 我会澄清一些事情

这些对象在上下文中管理/加载。 有两种类型的上下文

  1. ViewContext(应该用于查看目的)
  2. BackgroundContext(应该用于在后台从例如 API 加载内容)

如果您更新对象或添加新对象,这些对象已经存在于所述上下文中。 要持久保存这些对象,您不必再像使用普通 SQL ( UPDATE table... )那样将它们“推”入其中。 您只需保存上下文,例如

// context is the one you loaded the objects from and worked with
context.save()

我希望这会有所帮助,我只是想粗略地总结一下,以便您更好地理解。 不要绝望,CoreData 有它的怪癖,你会习惯的。 有关更多详细信息,请阅读Apple 使用 Core Data 的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM