Объекты окружающей среды не переносятся на детские взглядыIOS

Программируем под IOS
Ответить
Anonymous
 Объекты окружающей среды не переносятся на детские взгляды

Сообщение Anonymous »

Я создаю приложение для iOS с использованием XCode, и у меня возникают некоторые проблемы с получением EnvironmentObject для правильной передачи между моим основным представлением и представлением ребенка. Они связаны с помощью навигационной линии внутри NavigationStack . Вот упрощенная версия моего кода, которая содержит только необходимый код: < /p>

Код: Выделить всё

struct MainPageView: View {
@EnvironmentObject var groups: groupManager

var body: some View {
NavigationStack {
// omitted code

NavigationLink {
AccountView()
} label: {
VStack {
if account.username.isEmpty {
Image("default_account_image")
} else {
account.profilePicture
}
Text("Account")
}
}

// omitted code
}
}
}
< /code>
Стиль также удаляется из кода, поэтому, если вы попытаетесь его предварительно, он будет выглядеть очень странно. Account 
является еще одной переменной среды, но она никоим образом не связана. Объект групп - это то, с чем у меня проблемы. Когда я перейду к AccountView , он должен показывать мне список групп, частью которого является пользователь, но по какой -то причине он просто показывает, как эта пустая коробка. Вот определение «GroupManager»: < /p>

Код: Выделить всё

class groupManager: ObservableObject {
@Published var groups: [Group] = getAllGroups()
}
Это не проблема с методом GetallGroups , и я проверил это с помощью отладки печати. Насколько я могу судить, это также не проблема с учетной записью . Если я просматриваю список групп из AccountView вместо своего основного представления, список загружается правильно. Вот код для учетной записи :

Код: Выделить всё

struct AccountView: View {
@State private var tab: Int = 0
@EnvironmentObject var groups: groupManager

var body: some View {
VStack {
Picker("Tabs", selection: $tab) {
Text("Personal").tag(0)
Text("Groups").tag(1)
}
.pickerStyle(SegmentedPickerStyle())

if tab == 0 {
Text("Showing personal view")
PersonalView()
} else if tab == 1 {
Text("Showing group view")
GroupList()
}
}
}
}
Те же группы Объект среды передается в представление, и на этот раз он загружается правильно. При обращении на вкладку Grouplist она правильно отображает список групп, частью которого является пользователь. Вот пример фотографии того, как он должен выглядеть:
Предварительный просмотр из Xcode о том, как он должен выглядеть < /p>
Вот как это выглядит, когда я смотрю на него из Вместо этого основной вид:
Предварительный просмотр из xcode о том, как он выглядит из основного представления < /p>
Последняя часть информации, которую я думаю (и надежда), актуальна, это то, что Grouplist Просмотр внешний вид нравиться. Это типичный список, который я научился делать из документов Apple XCode, и вот он: < /p>

Код: Выделить всё

struct GroupList: View {
@EnvironmentObject var groups: groupManager

var body: some View {
NavigationSplitView {
List(groups.groups) {group in
NavigationLink {
GroupRecipeList(group: group)
} label: {
GroupRow(group: group)
}
.listRowBackground(Color(red: 0.92, green: 0.92, blue: 0.92))
}
.scrollContentBackground(.hidden)
} detail: {
Text("Select a group")
}
}
}
Здесь мы можем увидеть те же группы объект среды. Чтобы быть ясным, этот объект передается в основное представление в точке входа приложения, когда он запускается не при моделировании. < /P>
Это должно быть всем фоном. До сих пор я пробовал практически все, что я могу придумать. Я попытался сделать это просто переменной, определенной в другом файле, а не в EnvironmentObject , но у меня все еще была такая же ошибка. Я пробовал явно передаю среду ervenorybject в accountView в навигационном обработке с использованием .environmentObject () , но это тоже не сработало. Я также пытался явно передаю его в Grouplist из AccountView . Я попытался попросить Chatgpt решить мои проблемы, но это просто дало мне тот же совет и никогда не исправил проблему. На данный момент у меня есть идеи, поэтому я был бы признателен за помощь!

Подробнее здесь: https://stackoverflow.com/questions/794 ... hild-views
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»