Необязательная переменная @State не инициализируется ⇐ IOS
-
Anonymous
Необязательная переменная @State не инициализируется
Я хочу иметь возможность открывать представление листа, в котором пользователь нажимает на что-либо в списке, и вся информация из этой нажатой ячейки списка отображается в представлении листа. Однако мне трудно инициализировать необязательную переменную @State значением списка. Я получаю следующую ошибку:
Тема 1: Неустранимая ошибка: неожиданно обнаружено ноль при развертывании необязательного значения
Похоже, что переменная State остается пустой, поэтому код отвечает, получая нулевое значение. Как я могу получить фактическое значение внутри, чтобы оно не было нулевым?
Будем благодарны за любую помощь.
Мой код ниже:
struct ContentView: Просмотр { @Environment(\.managedObjectContext) var ManagedObjContext @FetchRequest(sortDescriptors: [SortDescriptor(\.date, order: .reverse)]) счетчики var: FetchedResults @State Private var MakingCounter = false @State Private var EditingCounter = false @State частная переменная selectedCounter: FetchedResults.Element? // Необязательная переменная состояния. var body: some View { НавигацияВью { ВСтек { Список { ForEach(counters) { счетчик в TimelineView(. periodic(from: .now, by: 1.0)) { временная шкала в CounterCellView(title: counter.title ?? "", значок: counter.icon ?? "", цвет: counter.color ??" "", дата: counter.date ?? Date()) } .listRowSeparator(.скрытый) .onTapGesture { selectedCounter = counter // Я хочу, чтобы переменная состояния была инициализирована для нажимаемого элемента в списке. редактированиеCounter.toggle() } } .onDelete (выполнить: deleteCounter) } .listStyle(.inset) } .navigationTitle("Счетчики") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem (размещение: .navigationBarTrailing) { Кнопка { созданиеCounter.toggle() } этикетка: { Изображение (имя системы: «плюс») } } } } .sheet(isPresented: $creatingCounter) { CreateCounterView(creatingCounter: $creatingCounter) } .sheet(isPresented: $editingCounter) { EditCounterView(editingCounter: $editingCounter, counter: selectedCounter!) // Где я получаю ошибку. } } func deleteCounter (по смещениям: IndexSet) { сАнимацией { offsets.map { counters[$0] }.forEach(managedObjContext.delete) DataController().save(контекст: ManagedObjContext) } } }
Я хочу иметь возможность открывать представление листа, в котором пользователь нажимает на что-либо в списке, и вся информация из этой нажатой ячейки списка отображается в представлении листа. Однако мне трудно инициализировать необязательную переменную @State значением списка. Я получаю следующую ошибку:
Тема 1: Неустранимая ошибка: неожиданно обнаружено ноль при развертывании необязательного значения
Похоже, что переменная State остается пустой, поэтому код отвечает, получая нулевое значение. Как я могу получить фактическое значение внутри, чтобы оно не было нулевым?
Будем благодарны за любую помощь.
Мой код ниже:
struct ContentView: Просмотр { @Environment(\.managedObjectContext) var ManagedObjContext @FetchRequest(sortDescriptors: [SortDescriptor(\.date, order: .reverse)]) счетчики var: FetchedResults @State Private var MakingCounter = false @State Private var EditingCounter = false @State частная переменная selectedCounter: FetchedResults.Element? // Необязательная переменная состояния. var body: some View { НавигацияВью { ВСтек { Список { ForEach(counters) { счетчик в TimelineView(. periodic(from: .now, by: 1.0)) { временная шкала в CounterCellView(title: counter.title ?? "", значок: counter.icon ?? "", цвет: counter.color ??" "", дата: counter.date ?? Date()) } .listRowSeparator(.скрытый) .onTapGesture { selectedCounter = counter // Я хочу, чтобы переменная состояния была инициализирована для нажимаемого элемента в списке. редактированиеCounter.toggle() } } .onDelete (выполнить: deleteCounter) } .listStyle(.inset) } .navigationTitle("Счетчики") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem (размещение: .navigationBarTrailing) { Кнопка { созданиеCounter.toggle() } этикетка: { Изображение (имя системы: «плюс») } } } } .sheet(isPresented: $creatingCounter) { CreateCounterView(creatingCounter: $creatingCounter) } .sheet(isPresented: $editingCounter) { EditCounterView(editingCounter: $editingCounter, counter: selectedCounter!) // Где я получаю ошибку. } } func deleteCounter (по смещениям: IndexSet) { сАнимацией { offsets.map { counters[$0] }.forEach(managedObjContext.delete) DataController().save(контекст: ManagedObjContext) } } }
Мобильная версия