当我使用SwiftUI界面和SwiftUI生命周期(标记核心数据)创建新项目时
设置完成后,我就在模拟器上运行并获得白屏。
在预览中,有一个填充列表-但没有编辑按钮
我正在使用Xcode 12(12A7209)。
如何使用模拟器,如何使工具栏正常工作?
答案 0 :(得分:0)
这似乎是一个小故障,但这里有一个解决方法。注意:我不知道这是否适用于非 iOS 设备。
将正文的内容包裹在 NavigationView
中,删除工具栏并添加如下所示的代码:
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
animation: .default)
private var items: FetchedResults<Item>
var body: some View {
NavigationView {
List {
ForEach(items) { item in
Text("Item at \(item.timestamp!, formatter: itemFormatter)")
}
.onDelete(perform: deleteItems)
}
.navigationBarItems(leading: EditButton(),
trailing: Button(action: addItem) { Image(systemName: "plus") }
)
}
}
private func addItem() { /// From this line down, Apple's code works.
另请注意,目前——我刚刚遇到了这个问题,这个解决方案适用于 Xcode 版本 12.3 (12C33)——你可能需要主动保存你的项目 (Command+S),退出 Xcode 并重新启动,以便 CoreData 的自动- 可以在范围内找到生成的实体“Item”。
答案 1 :(得分:0)
这是按预期工作的。在模拟器中,核心数据栈中没有数据。所以列表没有什么可显示的,屏幕是空的。不幸的是,工具栏没有显示。
对于预览,您正在使用已添加项目的堆栈。查看 Persistent 文件。您将找到一个添加项目的预览堆栈。对于使用环境中的 viewcontext 或 @FetchRequest 读取的所有视图,您需要将 viewcontext 添加到预览中。
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
//-> adding items to show in the preview here
for i in 0..<10 {
let newItem = Task(context: viewContext)
newItem.date = Date()
newItem.content = "task with number \(i)"
}
do {
try viewContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
return result
}()
如果你想看更多,你可以检查这个