【发布时间】:2021-07-25 08:52:11
【问题描述】:
使用 Xcode 12.5(适用于 iOS 14.5)我创建了一个新的 iOS 项目并设置了“核心数据”复选框:
正如您在上面的屏幕截图中看到的,预览画布中的列表已填充。
但是当我在模拟器或真正的 iPhone 11 上运行项目时,列表为空(这是意料之中的)并且没有显示“编辑”或“添加项目”按钮来添加任何新项目.
我没有修改the project,除了尝试其他颜色(以确保丢失的按钮不是黑底黑字)。我还尝试添加一个带有硬编码字符串数组的列表,它起作用了:
这是我的ContentView.swift,为什么没有显示添加或编辑项目的按钮?
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
animation: .default)
private var items: FetchedResults<Item>
private var items2:[String] = (1...200).map { number in "Item \(number)" }
var body: some View {
VStack {
Text("FetchJsonEscapable").foregroundColor(.orange)
List {
ForEach(items2, id: \.self) { item in
Text("Item \(item)")
.foregroundColor(.green)
}
/*
ForEach(items) { item in
Text("Item at \(item.timestamp!, formatter: itemFormatter)")
.foregroundColor(.blue)
}
.onDelete(perform: deleteItems)
*/
}
.toolbar {
EditButton()
Button(action: addItem) {
Label("Add Item", systemImage: "plus")
}
}
}
}
private func addItem() {
withAnimation {
let newItem = Item(context: viewContext)
newItem.timestamp = Date()
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
private func deleteItems(offsets: IndexSet) {
withAnimation {
offsets.map { items[$0] }.forEach(viewContext.delete)
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
}
private let itemFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
return formatter
}()
更新:
我已听从 Scott 的建议(谢谢!)并添加了 NavigationView。
现在“编辑”按钮可见,但仍然无法添加新项目:
【问题讨论】:
-
您需要在顶部有一个 NavigationView。 Apple 的代码不附带它,但要查看您需要的工具栏。放在VStack上面
-
我有added the NavigationView,但“添加项目”按钮仍未显示,请查看我更新的问题。
标签: ios swift xcode core-data swiftui