티스토리 뷰
[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
- 토큰저장
- CoreData
- weak
- context
- 디자인패턴
- core data
- autoclosure
- 회원가입
- 강한참조순환
- Persistent Container
- 클로저
- inout 파라미터 메모리 충돌
- Entity
- identity Token
- ASAuthorizationAppleIDCredential
- Core Data Stack
- 자동클로저
- escaping closrue
- Delegate 패턴
- unowned
- 메모리 안정성
- 클로저 강한 참조
- SWIFT
- ios
- object
- 클로저 축약
- 클로저표현
- 강한 참조 순환
- authorizationCode
- 캡쳐리스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |