I updated my XCode to 12.5 today and all of my views with navigationlinks are working, except that in the subview when my "cancel" button is pressed and I issue
self.presentationMode.wrappedValue.dismiss()
upon returning to the parent view I'm seeing
"Unable to present. Please file a bug."
Worked just fine in 12.4.... I have many areas that are now broken...
Any ideas would be GREATLY appreciated...
I have found that if there are two or less navigation links in a parent view this does not occur...
That would be a tremendous redesign and recode to figure how to do that...
PARENT CODE:
i
var body: some View {
LazyVGrid(columns: columns, spacing: 10) {
Text("BUDGETED INCOME")
.foregroundColor(self.labelColor)
.padding(.leading, 10)
NavigationLink(destination: BudgetedIncomeView(account_code: self.account_code, budget_year: self.budget_year, budget_month: self.budget_month, displayMoYr: self.displayMonthYearString)){
Text("\(self.expected_income, specifier: "%.2f")")
.foregroundColor((self.expected_income 0) ? self.negativeColor : self.numberColor)
.background(self.globalSettings.globalViewPaleYellowColor)
.border(Color.yellow)
}
NavigationLink(destination: BudgetedIncomeReceivedView(account_code: self.account_code, budget_year: self.budget_year, budget_month: self.budget_month, displayMoYr: self.displayMonthYearString)){
Text("\(self.expected_income_received, specifier: "%.2f")")
.foregroundColor((self.expected_income_received 0 ) ? self.negativeColor : self.numberColor)
.background(self.globalSettings.globalViewPaleYellowColor)
.border(Color.yellow)
.padding(.trailing, 15)
}
Text("UNPLANNED INCOME")
.foregroundColor(self.labelColor)
.padding(.leading, 70)
Spacer()
NavigationLink(destination: BudgetedIncomeUnexpectedView(account_code: self.account_code, budget_year: self.budget_year, budget_month: self.budget_month, displayMoYr: self.displayMonthYearString)){
Text("\(self.unexpected_income_received, specifier: "%.2f")")
.foregroundColor((self.unexpected_income_received 0 ) ? self.negativeColor : self.numberColor)
.background(self.globalSettings.globalViewPaleYellowColor)
.border(Color.yellow)
.padding(.trailing, 15)
}
//*********** NEXT LINE ************//
Text("BEG. BAL. PLUS INCOME")
.foregroundColor(self.labelColor)
.padding(.leading, 10)
Spacer()
Text("\(self.beginning_balance + self.expected_income_received + self.unexpected_income_received, specifier: "%.2f")")
.foregroundColor((self.beginning_balance + self.expected_income_received + self.unexpected_income_received 0 ) ? self.negativeColor : self.numberColor)
.padding(.trailing, 15)
} // END OF LAZYVGRID
.font(.title)
} // END OF BODY
}
SUBVIEW CODE:
//
// BudgetedIncomeView.swift
// ManagingYourMoney
//
// Created by Robert Petruzzelli on 4/23/21.
//
import SwiftUI
struct BudgetedIncomeView: View {
@State var recordDeleted: Bool = false
@State var isAdding: Bool = false
@State var account_code: Int
@State var budget_year: Int
@State var budget_month: Int
@State var displayMoYr: String
@State var budgetRec = BudgetedIncome.BudgetedIncomeRecord()
// Environment and ObservedObjects
@EnvironmentObject var budget: Budget
@Environment(\.presentationMode) var presentationMode
@Environment(\.editMode) var editMode
// Array of Budgeted Expense records for View List
var budgetedIncome: [BudgetedIncome.BudgetedIncomeRecord] {
return BudgetedIncome.shared.selectBudgetedIncomeForAccountWithMonthAndYear(withAccountCode: self.account_code, withYear: self.budget_year, withMonth: self.budget_month)
}
var body: some View {
ZStack {
VStack {
BudgetedIncomeHeader(headerText: "Budgeted")
.padding(.top, 10)
List {
ForEach (self.budgetedIncome, id: \.self) { budgetRecord in
BudgetedExpenseRow(
description: budgetRecord.description,
expense_amount: NumberFormatter.roundToPlaces(value: budgetRecord.income_budget, places: 3),
category: budgetRecord.category,
hidden: budgetRecord.hidden
)
.deleteDisabled((self.editMode?.wrappedValue == .active ) ? false : true)
.contentShape(Rectangle())
.onTapGesture {
budgetRec = budgetRecord
self.isAdding.toggle()
} // END OF ONTAPGESTURE
} // END OF FOREACH
.onDelete(perform: self.delete)
} // END OF LIST
BudgetedIncomeFooter(accountCode: $account_code, budgetYear: $budget_year, budgetMonth: $budget_month)
.padding(.top, 5)
} // END OF VSTACK
} // END OF ZSTACK
.onAppear(){
}
.navigationBarTitle("Budgeted Income for \(self.displayMoYr)")
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading:
Button(action: {
if self.recordDeleted {
self.budget.updated += 1
self.recordDeleted = false
}
self.presentationMode.wrappedValue.dismiss()
}, label: {
Text("Cancel")
})
,
trailing:
HStack {
EditButton()
Button(action: {
self.isAdding.toggle()
}, label: {
Image(systemName: "plus")
})
}
) // END OF NAVIGATION VIEW
} // END OF BODY VIEW
func delete(at offsets: IndexSet) {
offsets.forEach { index in
// let budgetIncome = self.budgetedIncome[index]
// deleteBudgetedExpenseAndDetailFiles(budRec: budgetExpense)
self.recordDeleted = true
}
}
} // END OF STRUCT VIEW
struct BudgetedIncomeView_Previews: PreviewProvider {
static var previews: some View {
BudgetedIncomeView(account_code: 12345678,
budget_year: 2020,
budget_month: 12,
displayMoYr: "December-2020")
.environmentObject(ApplicationSettings())
.environmentObject(Budget())
.environmentObject(GlobalSettings())
}
}
Clicking on the cancel button and returning to the parent is when the log item occurs.
Selecting any option will automatically load the page