[!CoreData] 앱의 영속적인 데이터를 저장 임시 데이터를 캐싱 단일 장치에서 앱에 undo 기능을 추가할 수 있도록 함
CoreData는 객체를 저장소에 매핑하는 세부 정보를 추상화 합니다. 이는 데이터베이스를 직접 관리하지 않고 Swift, Objective-C에서 데이터를 쉽게 저장할 수 있도록 합니다.
[[CoreDataStack]]
[!Note] fetch 혹은 in-memory 필터링 검색을 제한하는데 쓰이는 논리적 조건의 정의 즉, 검색을 제한(필터링)하기 위해 사용한다.
public convenience init(format predicateFormat: String, _ args: any CVarArg...)
initialize할 때 format을 정해줄 수 있습니다. 이는 검색 조건을 정해주는 것을 의미합니다.
예를 들어 NSPredicate(format: "retrospect == %@", self)
이라면 retrospect 속성이 %@
즉 self
와 같다는 것을 의미하여
guard let entity = NSEntityDescription.entity(
forEntityName: "PhoneBook",
in: container.viewContext
) else { return }
let person = NSManagedObject(entity: entity, insertInto: container.viewContext)
person.setValue("메모입니다.", forKey: "memo")
person.setValue("문영균", forKey: "personName")
person.setValue("010-1234-5678", forKey: "phoneNumber")
do {
try container.viewContext.save()
} catch {
print(error.localizedDescription)
}
@IBAction func save() {
guard let entity = NSEntityDescription.entity(
forEntityName: "PhoneBook",
in: container.viewContext
) else { return }
let person = NSManagedObject(entity: entity, insertInto: container.viewContext)
person.setValue("메모입니다.", forKey: "memo")
person.setValue("문영균", forKey: "personName")
person.setValue("010-1234-5678", forKey: "phoneNumber")
do {
try container.viewContext.save()
} catch {
print(error.localizedDescription)
}
}
@IBAction func fetch() {
do {
guard let contact = try container.viewContext.fetch(PhoneBook.fetchRequest()) as? [PhoneBook] else { return }
contact.forEach {
print($0.personName ?? "")
print($0.phoneNumber ?? "")
print($0.memo ?? "")
}
} catch {
print(error.localizedDescription)
}
}
@IBAction func deleteAll() {
let fetchRequest = PhoneBook.fetchRequest()
let items = try? container.viewContext.fetch(fetchRequest)
for item in items ?? [] {
print(item)
container.viewContext.delete(item)
}
try? container.viewContext.save()
}