티스토리 뷰

Tech/iOS

iOS 로컬 데이터 저장 (2) CoreData

Ellie Kim 2018. 10. 17. 02:03

iOS에서 로컬로 데이터를 저장하는 방법에는 여러가지가 있습니다. 


코어데이터 , 유저디폴트, 렘 등등 


그중에서도 코어데이터 사용 방법을 알아보겠습니다.




프로젝트를 생성할 때 무조건 보게 되는 체크박스 3개중에서 가장 상단에 있는것이 코어데이터를 사용하는 체크박스입니다.



코어데이터를 사용하면 프로젝트내에 코어데이터 데이터 모델 파일이 생성됩니다. 



위의 파일을 클릭해 사용할 Entity를 만듭니다.

(CoreData에서는 Entity라고 부르니 Class나 Table을 Entity라고 생각하면 될것같습니다.)



엔티티를 설정하고 필요한 어트리뷰트를 설정해주면 됩니다.


어트리뷰트를 클릭하고 오른쪽에 보면 프로퍼티를 설정 가능한데 Optional에 체크가 되어있으면 값이 있어도 되고 없어도 되는 경우입니다.


값이 꼭 들어와야 하는 경우에는 옵셔널 체크를 해지해주면 되겠죠 ! 



여기까지는 사용할 데이터 모델을 완성했습니다.


코어 데이터를 사용한다고 했을 때 가장 눈에 띄는 것이 AppDelegate가 달라지는 것입니다.


앱 델리게이트를 살펴보면



여기서 lazy var로 DataModel인 파일을 NSPersistentContainer의 persistentContainer을 생성합니다. 


즉 내 앱에서 코어 데이터를 캡슐화하는 컨테이너 역할을 하는 persistentContainer을 선언해주고 container.loadpersistemtStores로 코어 데이터를 로드하게 됩니다.


만약 에러가 발생하면 NSError로 에러 메시지를 출력 가능하며 리턴은 캡슐화된 컨테이너입니다.



코어 데이터의 데이터를 저장하는 메소드 saveContext를 살펴보면 read only인 context를 생성합니다.


만약 context가 변경되면 context.save()를 호출해 변경된 내용을 저장하게 합니다. 


마찬가지로 에러가 나면 에러를 출력합니다. 







사용 방법 


* import CoreData

코어 데이터를 사용할 클래스에 import CoreData를 선언해줍니다.


* var dataArray = [Item]()

데이터를 저장할 코어 데이터의 엔티티 Item 배열 객체를 선언해줍니다.

(이때 item은 NSMangedObject로 NSMmanagedObject는 코어 데이터의 모델 객체에 필요한 모든 것을 구현하는 일반 클래스입니다.)


* let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

내가 사용할 클래스에 context를 생성해 앱 델리게이트 클래스의 객체를 만들어 임시적인 데이터 공간을 선언해줍니다.




코어 데이터의 데이터를 로드해주는 작업이 필요합니다.


데이터를 가져오기 위해 load 하는 작업이 필요합니다.


가져온 데이터들을 위에서 만들어놓은 dataArray에 넣어줍니다.



코어 데이터에 변경된 데이터를 변경해주는 작업이 필요합니다.


데이터를 저장하면 변경하던 추가하던 삭제하던 데이터의 변경이 있는 경우 context save를 호출해 데이터를 저장합니다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함