#core-data #swiftui
#основные данные #свифтуи
Вопрос:
Я пытаюсь изменить базовые CoreData для TabView в SwiftUI, и это отражается, когда пользователь создает или удаляет данные, но представление никогда не «перерисовывается», вот что у меня есть до сих пор:
struct AddUserView: View {
@State var showingAddNewUser = false
@Environment(.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: Users.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: User.fName, ascending: true)
]
) var fetchedUsers: FetchedResults<Users>
var body: some View {
TabView{
if(fetchedUsers.count > 0){
ForEach(fetchedUsers) { user in
UserProfileView(showingAddNewUser: showingAddNewUser, user: user, managedObjectContext: _managedObjectContext)
}
AddUserView(showingAddNewuser: false)
} else{
AddUserView(showingAddNewuser: false)
}
}.frame(width: UIScreen.main.bounds.width, height: 400)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
Для UserProfileView у меня есть:
struct UserProfileView: View {
@State var showingAddNewUser = false
@ObservedObject var user: Users
@Environment(.managedObjectContext) var managedObjectContext
var body: some View {
the body of my user profile view.. Essentially some Text views to display user info along with a delete button
after editing the context is saved here
private func saveContext() {
do {
try managedObjectContext.save()
} catch {
print("Error saving managed object context: (error)")
}
}
Когда я использую кнопку удаления, пользователь удаляется, но TabView в AddUserView не перерисовывается / не обновляется. Как мне вызвать запрос «выборка» для обновления набора данных?
Комментарии:
1. Вам нужно сохранять
managedObjectContext
после каждой манипуляции.2. Привет, Коен — я делаю (я просто оставил это для краткости) Я добавил это в свой первоначальный вопрос, вот функция сохранения: private func saveContext() { do { try managedObjectContext.save() } catch { print(«Ошибка сохранения контекста управляемого объекта: (ошибка)») } }
3. Когда вы звоните
saveContext
, я не вижу этого в вашем коде.