#swift #swiftui
#swift #swiftui
Вопрос:
Я передаю объект модели coredata ( ItemModel
), используя перечисления, подобные этому
.sheet(item: $activeSheet, onDismiss: { self.activeSheet = nil }) { item in
switch item {
case .newDoc:
NewDocumentView(ref: nil).environment(.managedObjectContext, context)
case .detailFolder(let data):
DetailedFolderView(item: data, dirName: data.wrappedName, updater: viewUpdater).environment(.managedObjectContext, context)
case .detailDoc(let file):
DetailDocumentView(item: file, fileName: file.wrappedItemName)
.environment(.managedObjectContext, context)
}
}
но пока я пытаюсь обновить ItemModel
объект в контексте DetailDocumentView
использования управляемого объекта после сохранения и отклонения представления родительский вид не обновляется, представление обновляется только после перезапуска приложения
Может кто-нибудь предложить способ обновления родительского представления после обновления объекта передаваемой модели coredata( ItemModel
) DetailDocumentView
. Любые предложения приветствуются 🙂
Застрял на этой проблеме в течение нескольких часов, пытался использовать наблюдаемые объекты, пытался использовать издателя при обновлении контекста, но до сих пор работал: (
Вот ссылка на код, используемый при нажатии на файл для представления DetailDocumentView
/// creates a grid to display data
/// - Parameters:
/// - geometry: setup dimension for the grid view
/// - folders: files required
/// - Returns: returns a grid
private func gridView(_ geometry: GeometryProxy, files: FetchedResults<ItemModel>) -> some View {
QGrid(files,
columns: 2,
columnsInLandscape: 0,
vSpacing: 20,
hSpacing: 35,
vPadding: 10,
hPadding: 10,
isScrollable: false,
showScrollIndicators: false) { file in
FileItemView(item: file)
.environment(.managedObjectContext, context)
.onTapGesture {
self.activeSheet = .detailDoc(file: file)
}
}
}
Пример перечисления, который я использовал для представления нескольких листов, приведен ниже
/// for presenting sheets
enum HomeViewActiveSheet: Any {
case newDoc
case detailFolder(folder: FolderModel)
case detailDoc(file: ItemModel)
}
// so that it can be used in the .sheet init
extension HomeViewActiveSheet: Identifiable {
var id: ObjectIdentifier {
ObjectIdentifier(Self.self)
}
}
И я объявляю его в родительском классе следующим образом:
@State private var activeSheet: HomeViewActiveSheet? = .none
Комментарии:
1. Не могли бы вы показать больше кода? Как
file
здесь обстоят дела?2. конечно, я добавил перечисление здесь