我正在学习Swift的CoreData
。我已经成功地让它在SwiftUI中工作,但无法让它在使用相同方法的UIKit
基于SwiftUI的应用程序中工作。切换状态保留并在纯基于SwiftUI的应用程序中工作,所以我假设我可以在基于UIKit
的SwiftUI应用程序中做类似的事情,但切换状态在UIKit
SwiftUI应用程序中从未改变。
我在两个项目中使用相同的实体,属性名称,布尔值,并设置默认值。我的问题是,我能不能在基于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创建了一个应用程序。