CoreData UIKit SwiftUI



我正在学习Swift的CoreData。我已经成功地让它在SwiftUI中工作,但无法让它在使用相同方法的UIKit基于SwiftUI的应用程序中工作。切换状态保留并在纯基于SwiftUI的应用程序中工作,所以我假设我可以在基于UIKit的SwiftUI应用程序中做类似的事情,但切换状态在UIKitSwiftUI应用程序中从未改变。

我在两个项目中使用相同的实体,属性名称,布尔值,并设置默认值。我的问题是,我能不能在基于UIKit的SwiftUI应用程序中使用来自纯SwiftUI应用程序的相同代码?

import CoreData
struct ContentView: View {

@Environment(.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: Item.isOn, ascending: true)], animation: .default)
private var items: FetchedResults<Item>

var body: some View {
VStack {
Toggle("", isOn: Binding<Bool>(
get: { items.first?.isOn ?? true},
set: {
items.first?.isOn = $0
try? viewContext.save()
print("value: ($0)")
}
))
.labelsHidden()
.frame(width: 100, height: 100, alignment: .center)
}
}
}

我不确定你所说的"基于UIKit的SwiftUI应用程序"是什么意思,但是看看你的代码,首先想到的是:

你有Item物品吗?我没有看到你创建它的代码,如果没有——你的setter将什么也不做。

另一件事,你可能会忘记,是设置.environment(.managedObjectContext, context)为你的根SwiftUI视图在你的SceneDelegate,或者当你初始化它与UIHostingController

你的AppDelegate应该有persistentContainer: NSPersistentContainer,但你可能有它,如果你用CoreData创建了一个应用程序。

最新更新