我有一个名为“ CloudPage”的核心数据类,并在我的代码中添加了扩展名:
extension CloudPage:GalleryItem {
// bunch of methods defined here
func someFunc() -> Bool {
return true
}
对我来说,扩展此类以使所有模型信息都位于此处是很有意义的。我还认为让此类知道如何保存其自身实例是有意义的,因此我在其中添加了viewcontext:
extension CloudPage:GalleryItem {
@Environment(\.managedObjectContext) private var viewContext
// ...some code...
但是现在swift说“扩展名不能包含存储的属性”。有一个更好的方法吗?我认为所有保存逻辑都应驻留在此模型上。
正如编译器已经说过的,不允许在Extension中添加存储的属性。CloudPage
是NSManagedObject
,表示它已经由CoreData管理。
无论如何,这不是你使用CoreData Objects的方式。我会澄清一些东西
这些对象是在上下文中管理/加载的。有两种类型的上下文
如果你更新对象或添加新对象,则这些对象已经存在于上述上下文中。要持久保留这些对象,你不必再像使用普通SQL(UPDATE table...
)那样将它们“推入”其中。你只需要保存上下文,例如
// context is the one you loaded the objects from and worked with
context.save()
希望对你有所帮助,我只是想概括一下,以便你更好地理解。不要绝望,CoreData有它的怪癖,你会习惯的。有关更多详细信息,请参阅Apple使用Core Data的文档。