mal*_*low 9 xcode canvas core-data ios swiftui
问题: 如何重置 Xcode 的预览画布?具体来说,如何删除在Canvas实时预览中创建的所有Canvas核心数据?
示例代码: 这是我用于 Canvas 预览的 SwiftUI 预览代码。
struct ItemView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
//Test data
let testItem = Item.init(context: context)
testItem.name = "Abc"
return ItemView(filter: false)
.environment(\.managedObjectContext, context)
}
}
Run Code Online (Sandbox Code Playgroud)
通过此代码,Canvas 向我显示了 testItem,而且还显示了在实时预览中创建的 Core Data 对象的 item.name。我想删除画布数据以看不到以前创建的对象。
我尝试过的事情: Xcode - 产品 > 清理构建文件夹 Xcode - 编辑器 > 画布 > 刷新画布模拟器 - 设备 > 删除所有内容和设置...
最后一项按模拟器的预期工作。我希望它也能删除 Canvas 数据,但事实并非如此。
--
完整的工作示例:
内容视图.swift
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@State var paidFilter :Bool? = nil
var body: some View {
NavigationView {
List {
ItemView(filter: paidFilter)
}
.listStyle(PlainListStyle())
.navigationTitle(Text("Items"))
.navigationBarItems(
trailing:
Button(action: {
let item = Item(context: self.managedObjectContext)
item.name = "Test"
do {
try self.managedObjectContext.save()
}catch{
print(error)
}
}) {
Image(systemName: "plus.circle.fill")
.font(.title)
}
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
return ContentView()
.environment(\.managedObjectContext, context)
}
}
Run Code Online (Sandbox Code Playgroud)
ItemView.swift
import SwiftUI
struct ItemView: View {
@Environment(\.managedObjectContext) var managedObjectContext
var fetchRequest: FetchRequest<Item>
var items: FetchedResults<Item> { fetchRequest.wrappedValue }
init(filter: Bool?) {
fetchRequest = FetchRequest<Item>(entity: Item.entity(), sortDescriptors: [])
}
var body: some View {
VStack {
ForEach(items, id: \.self) {item in
Text("\(item.name ?? "test123")")
}
}
}
}
struct ItemView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
//Test data
let testItem = Item.init(context: context)
testItem.name = "Abc"
return ItemView(filter: false)
.environment(\.managedObjectContext, context)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2915 次 |
| 最近记录: |