-
SwiftUI Core Data 91 - 데이터 삭제SwiftUI 100 레시피/Core Data 2022. 7. 1. 12:27
#1. CoreDataManager, deleteMovie 함수 생성
import Foundation
import CoreData
class CoreDataManager{
let persistentContainer: NSPersistentContainer
init(){
persistentContainer = NSPersistentContainer(name: "HelloCoreDataModel")
persistentContainer.loadPersistentStores{(description, error) in
if let error = error {
fatalError("Core Data Store failed to initialize \(error.localizedDescription)")
}
}
}
//Fetch
func getAllMovies() -> [Movie]{
let fetchRequest: NSFetchRequest<Movie> = Movie.fetchRequest()
do{
return try persistentContainer.viewContext.fetch(fetchRequest)
} catch {
return []
}
}
//Delete
func deleteMovie(movie: Movie){
persistentContainer.viewContext.delete(movie)
do{
try persistentContainer.viewContext.save()
} catch {
persistentContainer.viewContext.rollback()
print("Failed to save context", error.localizedDescription)
}
}
//Save Entity
func saveMovie(title: String){
let movie = Movie(context: persistentContainer.viewContext)
movie.title = title
do{
try persistentContainer.viewContext.save()
print("Movie saved!")
} catch{
print("Failed to save movie", error )
}
}
}
#2. ContentView, 리스트뷰에 적용
import SwiftUI
struct ContentView: View {
let coreDM: CoreDataManager
@State private var movieName: String = ""
@State private var movies: [Movie] = [Movie]()
//데이터 가져오기
private func populateMovies(){
movies = coreDM.getAllMovies()
}
var body: some View {
VStack{
TextField("Enter movie name", text: $movieName).textFieldStyle(RoundedBorderTextFieldStyle())
Button("Save"){
coreDM.saveMovie(title: movieName)
populateMovies()
}
List{
ForEach(movies, id: \.self){ movie in
Text(movie.title ?? "")
}.onDelete(perform: { indexSet in
indexSet.forEach{ index in
let movie = movies[index]
coreDM.deleteMovie(movie: movie)
populateMovies()
}
})
}
Spacer()
}.padding()
.onAppear(perform: {
populateMovies()
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(coreDM: CoreDataManager())
}
}
삭제하려는 데이터 데이터 삭제후 'SwiftUI 100 레시피 > Core Data' 카테고리의 다른 글
SwiftUI Core Data 93 - 데이터 Refresh (0) 2022.07.01 SwiftUI Core Data 92 - 데이터 업데이트 (0) 2022.07.01 SwiftUI Core Data 90 - 데이터 가져오기 (0) 2022.07.01 SwiftUI Core Data 89 - 데이터(Entity(Movie)) 저장하기 (0) 2022.07.01 SwiftUI Core Data 88 - Core Data 초기화 (0) 2022.07.01