ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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())

        }

    }

     

    댓글

Designed by Tistory.