簡體   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