EnvironmentObject обновлен в представлении, но не в корневом файле приложения. ⇐ IOS
EnvironmentObject обновлен в представлении, но не в корневом файле приложения.
Я столкнулся с очень странной проблемой в своем приложении SwiftUI.
Я пытаюсь сохранить некоторую информацию о пользовательских данных благодаря сериализации JSON. Поэтому я создал класс UserData, который передается как объект среды и доступен во всех моих приложениях:
(Я намеренно упрощаю код, удаляя часть сохранения и загрузки данных из основного файла приложения)
класс UserData: ObservableObject, Codable { вар горшки: Set init(горшки: Set) { self.pots = горшки } } struct Pot: идентифицируемый, кодируемый, хешируемый{ пусть идентификатор = UUID() пусть заголовок: Строка пусть описание: Строка вар currentMoneyAmout: Float пусть potImage: URL пусть подарок: Подарок пусть участники: [Участник] пусть OwnerId: строка func hash(into hasher: inout Hasher) { hasher.combine (идентификатор) } static func == (слева: горшок, справа: горшок) -> Bool { вернуть lhs.id == rhs.id && lhs.title == rhs.title } } расширение Pot { статический letviewPot = Pot( название: "Кадо Коко", описание: «Кадо для юбилея кокоса», текущие деньгиАмаут: 30, potImage: URL(строка: «https://montetasoiree.com/wp-content/up ... _intro.jpg»)!, подарок: .previewGift, члены: [.previewMember], идентификатор владельца: "а" ) } @main структура PotivApp: Приложение { @State Private var userData = UserData(pots: []) в этом(){ FirebaseApp.configure() } var body: некоторая сцена { ОкноГруппа { КонтейнерВью() .environmentObject(данные пользователя) } } } Затем я получаю этот объект UserData в представлении, чтобы обновить его:
struct newPot: View { @Environment(\.dismiss) вар отклонить @EnvironmentObject частная переменная userData: UserData var body: some View { VStack{ Разделитель() Кнопка{ сохранитьПот() увольнять() } этикетка: { Текст("Креер") .font(.system(размер: 20, вес: .bold)) .frame(maxWidth: .infinity, maxHeight: 50) .foregroundColor(Цвет.белый) .background(Цвет.синий) .cornerRadius(.бесконечность) } .padding(.горизонтальный) Разделитель() } } частная функция savePot() { пусть горшок = Pot.previewPot self.userData.pots.insert(горшок) self.userData.objectWillChange.send() } } Когда я печатаю свои горшки пользовательских данных в этом представлении, оно содержит новый банк, который я только что создал. Но когда я пытаюсь распечатать горшки из основного файла приложения, он не содержит нового горшка, и я действительно не понимаю, почему.
Во-первых, я подумал, что два объекта UserData не одинаковы. Но после проверки это так.
У кого-нибудь была идея?
Я столкнулся с очень странной проблемой в своем приложении SwiftUI.
Я пытаюсь сохранить некоторую информацию о пользовательских данных благодаря сериализации JSON. Поэтому я создал класс UserData, который передается как объект среды и доступен во всех моих приложениях:
(Я намеренно упрощаю код, удаляя часть сохранения и загрузки данных из основного файла приложения)
класс UserData: ObservableObject, Codable { вар горшки: Set init(горшки: Set) { self.pots = горшки } } struct Pot: идентифицируемый, кодируемый, хешируемый{ пусть идентификатор = UUID() пусть заголовок: Строка пусть описание: Строка вар currentMoneyAmout: Float пусть potImage: URL пусть подарок: Подарок пусть участники: [Участник] пусть OwnerId: строка func hash(into hasher: inout Hasher) { hasher.combine (идентификатор) } static func == (слева: горшок, справа: горшок) -> Bool { вернуть lhs.id == rhs.id && lhs.title == rhs.title } } расширение Pot { статический letviewPot = Pot( название: "Кадо Коко", описание: «Кадо для юбилея кокоса», текущие деньгиАмаут: 30, potImage: URL(строка: «https://montetasoiree.com/wp-content/up ... _intro.jpg»)!, подарок: .previewGift, члены: [.previewMember], идентификатор владельца: "а" ) } @main структура PotivApp: Приложение { @State Private var userData = UserData(pots: []) в этом(){ FirebaseApp.configure() } var body: некоторая сцена { ОкноГруппа { КонтейнерВью() .environmentObject(данные пользователя) } } } Затем я получаю этот объект UserData в представлении, чтобы обновить его:
struct newPot: View { @Environment(\.dismiss) вар отклонить @EnvironmentObject частная переменная userData: UserData var body: some View { VStack{ Разделитель() Кнопка{ сохранитьПот() увольнять() } этикетка: { Текст("Креер") .font(.system(размер: 20, вес: .bold)) .frame(maxWidth: .infinity, maxHeight: 50) .foregroundColor(Цвет.белый) .background(Цвет.синий) .cornerRadius(.бесконечность) } .padding(.горизонтальный) Разделитель() } } частная функция savePot() { пусть горшок = Pot.previewPot self.userData.pots.insert(горшок) self.userData.objectWillChange.send() } } Когда я печатаю свои горшки пользовательских данных в этом представлении, оно содержит новый банк, который я только что создал. Но когда я пытаюсь распечатать горшки из основного файла приложения, он не содержит нового горшка, и я действительно не понимаю, почему.
Во-первых, я подумал, что два объекта UserData не одинаковы. Но после проверки это так.
У кого-нибудь была идея?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение