Typ nie ma indeksu członka, w SwiftUI z CoreData [zamknięte]

Dec 25 2020

Próbowałem znaleźć odpowiedź na to pytanie, ale żadna z poprzednich odpowiedzi nie odnosi się konkretnie do podstawowych danych.

Próbuję utworzyć funkcję, która usuwa moje dane z widoku przewijania, z CoreData, onDelete. Wyświetla mi następujący błąd obok zezwalania na usuwanie = SavedPoem [indeks] ": Typ" SavedPoem "nie ma elementu" indeksu " .

„SavedPoem” to jednostka przechowywana w CoreData, dlatego nie jestem pewien, jak wykonać którekolwiek z sugerowanych zaleceń w poprzednich pytaniach.

Kod tutaj:

import SwiftUI

struct SavedPoemList: View {
    
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: SavedPoem.entity(), sortDescriptors: []) var savedpoems : FetchedResults<SavedPoem>
    
    var body: some View {
        
        VStack (alignment: .leading, spacing: 0) {
            
            HStack{
                Text("Your Saved Poems")
                    .font(.title)
                    .fontWeight(.black)
                    .foregroundColor(.black)

                    
                Spacer()
                    
                    
            }.padding(.bottom)
            .padding(.trailing)
            .padding(.leading)
               
            ScrollView {
                    
                ForEach(savedpoems, id:\.title) {SavedPoem in
                   
                    NavigationLink (destination: DetailViewSaved()){
                      
                        ZStack {
                            
                            Rectangle()
                                .fill(Color.white)
                                .frame(width: UIScreen.screenWidth - 40, height: 70)
                                .cornerRadius(5)
                                .padding([.horizontal], 20)
//                                .shadow(color: .gray, radius: 10)
                                                        
                            HStack {
                                VStack (alignment: .leading){
                                    Text("\(SavedPoem.title ?? "")")
                                        .font(.headline)
                                        .foregroundColor(.black)
                                        .lineLimit(1)
                                        
                                    
                                    Text("\(SavedPoem.author ?? "")")
                                        .font(.subheadline)
                                        .foregroundColor(.secondary)
                                }
                                .padding(.horizontal)
                                Spacer()
                                
                            }
                            .padding()
                        }.padding(.bottom,10)
                        
                    }
                }.onDelete(perform: remove)
                
            }
            .navigationTitle("My Saved Poems")
            .navigationBarHidden(true)
            .edgesIgnoringSafeArea(.top)
            .padding(.bottom, 30)
                    

            }
        .padding(.horizontal)
        .edgesIgnoringSafeArea(.bottom)
        
    }
        func remove(at offsets : IndexSet) {
            for index in offsets {
                let delete = SavedPoem[index]
                self.moc.delete(delete)
            }
            try? self.moc.save()
        }
}

struct SavedPoemList_Previews: PreviewProvider {
    static var previews: some View {
        SavedPoemList()
    }
}

Struktura CoreData SavedPoem:

Jakieś pomysły? Z góry dziękuję.

Odpowiedzi

Asperi Dec 25 2020 at 12:16

Prawdopodobnie miałeś zamiar użyć savedpoemszamiastSavedPoem

for index in offsets {
    let delete = savedpoems[index]
    self.moc.delete(delete)
}