核心数据 UIKit SwiftUI
CoreData UIKit SwiftUI
我正在了解 CoreData
Swift。我已经成功地让它在 SwiftUI 中工作,但无法使用相同的方法在基于 UIKit
SwiftUI 的应用程序中工作。切换状态被保留并在基于 SwiftUI 的纯应用程序中工作,所以我假设我可以在基于 SwiftUI 的应用程序中做类似的事情但是UIKit
SwiftUI 应用程序中的切换状态永远不会改变。
我在两个项目中使用了相同的实体、属性名称、布尔值,并设置了默认值。我的问题是我不能在基于 SwiftUI 的 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 = [=10=]
try? viewContext.save()
print("value: \([=10=])")
}
))
.labelsHidden()
.frame(width: 100, height: 100, alignment: .center)
}
}
}
我不确定“基于 UIKit 的 SwiftUI 应用程序”是什么意思,但查看您的代码首先想到的是:
你有什么Item
对象吗?我没有在您创建代码的地方看到代码,如果没有代码,您的 setter 将无能为力。
您可能会忘记的另一件事是,在 SceneDelegate
中为您的根 SwiftUI 视图设置 .environment(\.managedObjectContext, context)
,或者当您使用 UIHostingController
初始化它时
当然你 AppDelegate
应该 persistentContainer: NSPersistentContainer
,但如果你使用 CoreData 创建了一个应用程序,你可能会拥有它。
我正在了解 CoreData
Swift。我已经成功地让它在 SwiftUI 中工作,但无法使用相同的方法在基于 UIKit
SwiftUI 的应用程序中工作。切换状态被保留并在基于 SwiftUI 的纯应用程序中工作,所以我假设我可以在基于 SwiftUI 的应用程序中做类似的事情但是UIKit
SwiftUI 应用程序中的切换状态永远不会改变。
我在两个项目中使用了相同的实体、属性名称、布尔值,并设置了默认值。我的问题是我不能在基于 SwiftUI 的 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 = [=10=]
try? viewContext.save()
print("value: \([=10=])")
}
))
.labelsHidden()
.frame(width: 100, height: 100, alignment: .center)
}
}
}
我不确定“基于 UIKit 的 SwiftUI 应用程序”是什么意思,但查看您的代码首先想到的是:
你有什么Item
对象吗?我没有在您创建代码的地方看到代码,如果没有代码,您的 setter 将无能为力。
您可能会忘记的另一件事是,在 SceneDelegate
中为您的根 SwiftUI 视图设置 .environment(\.managedObjectContext, context)
,或者当您使用 UIHostingController
当然你 AppDelegate
应该 persistentContainer: NSPersistentContainer
,但如果你使用 CoreData 创建了一个应用程序,你可能会拥有它。