【发布时间】:2020-11-15 22:34:36
【问题描述】:
@State var documents: [ScanDocument] = []
func loadDocuments() {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "ScanDocument")
do {
documents = try managedContext.fetch(fetchRequest) as! [ScanDocument]
print(documents.compactMap({$0.name}))
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
在第一个视图中:
.onAppear(){
self.loadDocuments()
}
现在我要详细查看一个对象:
NavigationLink(destination: RenameDocumentView(document: documents[selectedDocumentIndex!]), isActive: $pushActive) {
Text("")
}.hidden()
在重命名文档视图中:
var document: ScanDocument
还有一个更新文档名称的功能:
func renameDocument() {
guard !fileName.isEmpty else {return}
document.name = fileName
try? self.moc.save()
print(fileName)
self.presentationMode.wrappedValue.dismiss()
}
所有这些代码都有效。这个打印语句总是打印更新的值:
print(documents.compactMap({$0.name}))
这是主视图中的列表代码:
List(documents, id: \.id) { item in
ZStack {
DocumentCell(document: item)
}
}
但是用户返回到上一个屏幕。该列表显示旧数据。如果我重新启动应用程序,它会显示新数据。
任何推动新方向的帮助都会有所帮助。
这里有一个类似的问题:SwiftUI List View not updating after Core Data entity updated in another View,但没有答案。
【问题讨论】:
标签: ios core-data swiftui swiftui-list