前提・実現したいこと
Swiftを独学で勉強していて、エラーメッセージから原因を探るのに苦戦しています。
Todoアプリ的なものを作っていまして、最後に終わったタスクを一覧で表示させて、次の画面に移る時にそのタスクのデータを全て消したいと考えています。
終わったタスクを消すこと自体は出来ているのですが、以下のエラーが出てアプリが強制終了します。
これはViewで表示させようとしているものが空だから出てるエラーなのでしょうか
初心者の拙い質問ですみません、ご教授いただけると幸いです。
やってみたこと
ForEach文の前にif文でデータがある時のみ表示
if !myItems.isEmpty{ ForEach(myItems, id: .id) { addToList in... }
発生している問題・エラーメッセージ
index 1 beyond bounds for empty NSArray"
該当のソースコード
import SwiftUI import CoreData struct ResultView: View { @Environment(.managedObjectContext) private var viewContext @EnvironmentObject var timeManager: TimeManager @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \ListItems.rowOrder, ascending: true)], animation: .default) private var myItems: FetchedResults<ListItems> @State var isShowSecondView = false @State var isShowResultView = false @State var isShowContentView = false var body: some View { ZStack{ ZStack{ Color(red: 1, green: 1, blue: 1) .edgesIgnoringSafeArea(.vertical) VStack{ Button(action: { self.isShowSecondView = false self.isShowResultView = false self.isShowContentView = true self.clearTask() }) { Image(systemName: "play") .font(.system(size: 100)) .padding(.init(top:20, leading: 50, bottom: 20, trailing: 50)) .background(Color.gray) .cornerRadius(30) } List { ForEach(myItems, id: .id) { addToList in HStack{ Text("(addToList.itemName ?? "Unknown")") Spacer() Text("(addToList.minResultTime):(addToList.secResultTime):(addToList.comResultTime)") } } .font(.system(size: 20)) } } } if isShowContentView { ContentView() } } } private func clearTask() { for entity in myItems{ if entity.resultTime > 0{ viewContext.delete(entity) saveData() } } } private func saveData() { try? self.viewContext.save() } } struct ResultView_Previews: PreviewProvider { static var previews: some View { ResultView().environment(.managedObjectContext, PersistenceController.preview.container.viewContext) .environmentObject(TimeManager()) } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー