Использование оболочки FetchRequest и изменение данных полученных результатов внутри представления. Это работает при первой загрузке представления, которое обновляется при каждом внесенном изменении.
Проблема в том, что если я отошел от представления и вернулся снова, изменения для получения данных запроса перестали обновлять представление. Единственный способ увидеть изменения - это снова перейти назад и назад.
Я печатаю запрос на выборку, и изменения в данных работают, что объясняет, почему, если я возвращаюсь назад, вид снова отображается правильно, но представление не обновляется при изменении этих данных в представлении.
Это ошибка или я что-то делаю неправильно?
У меня есть представление библиотеки, в котором отображаются все журналы, впервый раздел представляет собой текстовое поле, позволяющее добавить новый журнал, во втором разделе - список всех журналов, которые можно выбрать, чтобы установить флажок рядом с ними.
Добавление новых журналов и их выбор работают в первую очередь. время .. Очень странно, что они перестают работать, если я ухожу и возвращаюсь.
struct LibraryView: View {
// MARK: - PROPERTIES
@Environment(\.managedObjectContext) var context
@FetchRequest(
// entity: Journal.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Journal.name, ascending: true)],
animation: .default
) var journals: FetchedResults<Journal>
@State private var name = ""
// MARK: - INITIAL VIEW -
var body: some View {
Form {
Section(header: Text("New Journal")) {
HStack {
TextField("Name", text: $name, onCommit: {
let newJournal = Journal(context: self.context)
newJournal.name = self.name
try? self.context.save()
self.name = ""
})
Button(action: { print("ACTION") }) {
Image(systemName: "plus.circle.fill")
}
}
}
Section(header: Text("Journals")) {
ForEach(journals) { journal in
Button(action: {
journal.isSelected.toggle()
try? self.context.save()
}) {
HStack {
Text(journal.name)
Spacer()
if journal.isSelected {
Image(systemName: "circle.fill")
}
}
}
}
}
}.navigationBarTitle("Library")
}
}
Журнал представляет собой простую базовую модель данных:
import Foundation
import CoreData
public class Journal: NSManagedObject, Identifiable {
@NSManaged public var name: String
@NSManaged public var isSelected: Bool
}
Я перехожу к библиотекеВид из вкладки Вид с навигационной ссылкой на панели навигации:
struct JournalView: View {
// MARK: - PROPERTIES
@State private var presentFiltersView = false
// MARK: - INITIAL VIEW -
var body: some View {
NavigationView {
Text("Journal")
.navigationBarTitle("Journal")
.navigationBarItems(
leading: NavigationLink(destination: LibraryView()) {
Text("Library")
},
trailing: Button(action: { self.presentFiltersView = true }) {
Text("Filters")
})
}.sheet(isPresented: $presentFiltersView) { Text("Filters") }
}
}
Я попытался удалить навигационную ссылку из элемента навигационной панели,и используя его как стандартную навигационную ссылку строки списка, результаты совпадают.