-
SwiftUI Core Data 90 - 데이터 가져오기SwiftUI 100 레시피/Core Data 2022. 7. 1. 12:13
#1. CoreDataManager, getAllMovies() 함수 생성
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 []
}
}
//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, populateMovies()함수로 데이터 가져오기
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(movies, id:\.self){ movie in
Text(movie.title ?? "")
}
Spacer()
}.padding()
.onAppear(perform: {
populateMovies() //시작시 데이터 생성
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(coreDM: CoreDataManager())
}
}
'SwiftUI 100 레시피 > Core Data' 카테고리의 다른 글
SwiftUI Core Data 92 - 데이터 업데이트 (0) 2022.07.01 SwiftUI Core Data 91 - 데이터 삭제 (0) 2022.07.01 SwiftUI Core Data 89 - 데이터(Entity(Movie)) 저장하기 (0) 2022.07.01 SwiftUI Core Data 88 - Core Data 초기화 (0) 2022.07.01 SwiftUI Core Data 87 - Core Data Model 생성 (0) 2022.07.01