티스토리 뷰
[Swift/iOS] CoreData 사용하기(4) - 속성값 유무에 따른 데이터 저장, 속성의 optional 타입
마들브라더 2023. 5. 6. 02:13https://modelinspring.tistory.com/92
[Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초
https://modelinspring.tistory.com/91 [Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서! 공식문서를 참고한 글입니다.https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack https://mode
modelinspring.tistory.com
위 포스트에 이은 CoreData 네 번째, 마지막 포스트입니다.
이전 포스팅에서는 Object에 값을 채운 후 데이터를 저장했습니다.
모든 값이 채워지지 않은 Object를 저장하면 어떻게 될까요?
nil이 포함된 저장
car.setValue(myCar["brand"], forKey: "brand")
// car.setValue(myCar["color"], forKey: "color")
car.setValue(myCar["price"], forKey: "price")
위와 같은 코드로, 일부 값을 비워서 저장해보겠습니다.

value를 주지 않고 저장하면, 해당 값이 nil로 들어가게 된 것을 알 수 있습니다.
Entity의 속성의 optional 유무
그럼 Entity의 속성들은 기본적으로 optional일까요?
guard let newcar = try? context.fetch(Car.fetchRequest()) else { return }
newcar.forEach {
print($0.brand, $0.color, $0.price)
print(type(of: $0.brand))
print(type(of: $0.color))
print(type(of: $0.price))
}

brand와 colors는 optional로, price는 Int64로 확인할 수 있습니다.
그럼 이번에는 price 값을 주지 않고 저장해보겠습니다.
car.setValue(myCar["brand"], forKey: "brand")
car.setValue(myCar["color"], forKey: "color")
// car.setValue(myCar["price"], forKey: "price")

nil이 아니라 0이 들어가있는 것을 알 수 있습니다.
아무런 설정을 하지 않는다면, 현재 String 속성은 optional로, Int64는 non-optional인 것을 알 수 있습니다.
optional 설정하기
사실은 Data Model 파일에서 Entity의 Attribute를 클릭한 후, 인스펙터 창을 확인하면 optional 여부를 설정할 수 있습니다.

인스펙터 창에서는 옵셔널 여부와 Default 값도 설정해줄 수 있습니다.
Integral64는 현재 optional로 설정되어있지만 기본 값이 0으로 설정되어 있습니다.
기본 값을 삭제하고 테스트해보겠습니다.(No Value)


0이 기본값으로 들어가고, 여전히 Int64로 타입으로 확인됩니다.
optional도 해제하고 저장해보겠습니다.

에러가 발생하는 것을 확인할 수 있습니다.
속성값이 non-optional 일때, 값이 전달되지 않으면 오류가 발생합니다.
그리고 저장된 데이터들 중에 nil이 있다면, 이후에 속성 값을 non-optional로 설정하면 역시 오류가 발생합니다.
속성 타입을 잘 관리해야 나중에 오류를 피할 수 있습니다.
'programming > Swift' 카테고리의 다른 글
| [Swift/iOS] 토큰 데이터를 KeyChain에 안전하게 저장하기 (0) | 2023.05.06 |
|---|---|
| [Swift/iOS] 애플 로그인 후 반환 값 ASAuthorizationAppleIDCredential From 공식문서 (0) | 2023.05.06 |
| [Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초 (0) | 2023.05.06 |
| [Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서 (0) | 2023.05.05 |
| [Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기 (0) | 2023.05.05 |
- Total
- Today
- Yesterday
- autoclosure
- 클로저 축약
- 캡쳐리스트
- Entity
- SWIFT
- 클로저
- 디자인패턴
- Core Data Stack
- 클로저표현
- 클로저 강한 참조
- escaping closrue
- identity Token
- 토큰저장
- 회원가입
- Delegate 패턴
- ios
- authorizationCode
- 강한참조순환
- ASAuthorizationAppleIDCredential
- unowned
- CoreData
- 강한 참조 순환
- context
- weak
- 메모리 안정성
- Persistent Container
- object
- 자동클로저
- core data
- inout 파라미터 메모리 충돌
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
