짧은인사, 하루의 사건, 나의 행동
ToDo
✅ 조금은 부지런해진 나
✅ 감사해 🙏
매일 나태해 지는 나를 어떡하면 조금 부지런하게 살아갈수 있을지를 고민하던중
공부하는 환경을 바꾸기로 했습니다..하하
바로 스터디 카페에 출첵을 하는것이죠!
이제 시간도 정해서 매일 오는 것으로 합시다 하하.하..ㅎ..ㅇ..
배운점
강의를 들으며 AppDelegate에 있는 코드를 뜯어보고있었습니다.
눈에 안들어오는 document까지,,
//SQLite DB
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
//context는 git의 스테이징area와 바슷
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
1. persistentContainer 변수.
- NSPersistentContainer는 데이터 모델과 저장소를 관리합니다.
- lazy var로 선언되며 처음 접근할때만 초기화됩니다.
- loadPersistentStores를 호출하여 데이터모델을 로드하고 영구 저장소를 설정합니다.
2. saveContext 함수
- saveContext함수는 데이터 변경을 저장소에 반영하는 역할을 합니다.
- viewContext는 github의 스테이징 영역과 유사한 개념으로 데이터를 변경하고 업데이트 할 수 있는 영역이다.
- context.hasChanges를 통해 현제 컨텍스트에 변경 사항이 있는지 확인하고, 변경사항이 있을경우
context.save()를 호출하여 저장소에 변경을 저장합니다.
CoreData CRUD
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
context를 AppDelegate의 persistentContainer로 부터 가져와서 사용한다.
- Create
let newItem = Item(context: self.context)
newItem.title = textField.text!
newItem.done = false
newItem.parentCategory = self.selectedCategory //Item과 Category의 정보저장
self.itemArray.append(newItem)
self.saveItems()
새로운 Item 객체를 생성합니다.
이 객체가 데이터에 할당된 후에 context.save()를 통해 CoreData에 저장됩니다.
-Read
func loadItems(with request: NSFetchRequest<Item> = Item.fetchRequest(), predicate: NSPredicate? = nil) {
do {
itemArray = try context.fetch(request)
} catch {
print("Error fetching data from context \(error)")
}
}
loadItems메서드는 CoreData에서 데이터를 가져와 itemArray에 할당합니다.
NSPredicate를 통해 득정 조건에 따라 데이터를 필텉링합니다.
-Update
//MARK: - TableView Delegate Method
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
itemArray[indexPath.row].done = !itemArray[indexPath.row].done
//DB에 저장
saveItems()
}
func saveItems() {
do {
try context.save()
} catch {
print("Error saving context \(error)")
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
itemArray[indexPath.row].done = !itemArray[indexPath.row].done
으로 변경이 된다.
context.save()로 변경사항을 DB에 저장한다.
-Delete
//context delete부터 먼저 제거해야함!
context.delete(itemArray[indexPath.row])
itemArray.remove(at: indexPath.row)
삭제시에는 context.delete에 삭제될 객체를 넣어주어야 context에 삭제사항이 반영된다.
context에 삭제사항을 반영하고 객체를 삭제하는 순서로 이루어져야함!
https://inuplace.tistory.com/1005
[CoreData] 기초개념 (1): Entity, CRUD
CoreData란? Apple에서 제공하는 데이터관리 프레임워크로, 데이터를 유지 및 캐싱할 수 있을 뿐 아니라 Cloudkit을 사용해 여러 장치에 데이터를 동기화하는 것도 가능하다. 내부적으로 SQLite를 사용
inuplace.tistory.com
https://80000coding.oopy.io/72aca705-64d9-4be6-aaf5-34c1def4223a
(Swift) 코어 데이터 이해하기
"아래 모든 내용은 애플 공식 문서를 참고하여 정리 및 구현한 내용입니다."
80000coding.oopy.io
생각과 감정
오늘까지 졸업유예기간이다.. 유예는 하지 않겠다,,, wOO yEaH~,,,,
'TIL' 카테고리의 다른 글
TIL-Vapor 맛보기 (1) | 2025.01.16 |
---|---|
TIL_20241009 Rx를 곁들인.. (0) | 2024.10.09 |
TIL_20240116 iOS에서 데이터를 저장하는 방법 (0) | 2024.01.16 |
TIL_20240110 Swift_AppSandbox, NSCoder (0) | 2024.01.10 |
TIL_20240109 Swift_SingletonPattern (0) | 2024.01.09 |