---
# System prepended metadata

title: 일기장 STEP 3 PR
tags: [PR]

---

# 일기장 STEP 3 PR
###### tags: `PR`

## 📁 FileTree
```
└── Diary
    ├── Network
    │   ├── NetworkManager
    │   └── URLData
    ├── CoreData
    │   ├── Diary+CoreDataClass
    │   ├── Diary+CoreDataProperties
    │   └── CoreDataManager
    ├── DiaryList
    │   ├── DiaryListView
    │   ├── DiaryListViewController
    │   └── DiaryListCell
    ├── Diary
    │   ├── DiaryView
    │   ├── DiaryViewController
    │   ├── AlertManager
    │   └── MyActivityItemSource
    ├── Model
    │   ├── DiaryModel
    │   ├── JsonPaser
    │   ├── NameSpace
    │   └── PageMode
    ├── Extensions
    │   ├── TimeInterval+Extension
    │   ├── Notification.Name+Extension
    │   └── UIImageView+Extension
    ├── AppDelegate
    ├── SceneDelegate
    ├── Info.plist
    └── Diary.xcdatamodeld
```
## 💻 구현사항

### 구동화면

| 새로운 일기생성 | 새로운 일기생성2 | 
|:---:|:---:|
|<img src = "https://i.imgur.com/IAIGOOl.gif" width="250" height="500">|<img src = "https://i.imgur.com/ZpEvaQG.gif" width="250" height="500">|

### 공통
**- SwiftLint 적용** O
**- 가로/세로 모드 모두 대응가능** O
**- UI는 모두 코드를 통해 구현** O

### STEP 3
**- OpenWeatherAPI와 네트워크 통신**
- 네트워킹 모델 WeatherModel 구현
    - main, iconId 값을 받아오도록 설정
- CLLocationManager를 이용하여 현위치의 위도, 경도값 파악
    - 위도, 경도값을 쿼리아이템으로 사용하여 네트워킹 요청
- light 마이그레이션
    - 기존의 entity에 attribute가 추가된 새로운 데이터모델 생성
    - 새로운 Diary 2 코어데이터를 추가하여 기존의 데이터에 맵핑
    - NSManagedObject 프로퍼티에 추가
- 받아온 iconId값을 이용하여 icon 이미지를 받아오는 네트워킹 코드 작성
    - 받아온 이미지를 dateLabel 과 previewLabel 사이에 imageView로 추가


## 🛠 Trouble Shooting
### 코어데이터 마이그레이션 했을 때 문제
- 코어데이터 모델에서 날씨 아이콘을 추가 시키기 위해서 코어데이터 마이그레이션을 사용했습니다.
- 마이그레이션으로 Diary2로 맵핑모델도 만들어주니 날씨 아이콘을 사용할 수 는 있었지만 다음과 같이 이전 버전에서 만들어 주었던 코어데이터에 저장되어 있던 셀에 오류가 생겼습니다. 이전의 데이터들이 무작위로 섞이기도하고 문제1 처럼 없어지기도 했습니다.
- 또 발견된 사항으로는 첫번째 데이터는 저장이 되지 않고 그 다음부터 저장이 되기도 했습니다. 마이그레이션 과정에서 어떤 문제가 있었던건지 마이그레이션을 하게 되면 원래 여러 문제가 발생할 가능성이 있는건지 궁금합니다. 이 오류를 아직 확실하게 해결하지 못했습니다.

|문제 1|문제 2|
|:--:|:--:|
|<img src = "https://i.imgur.com/tMg8O3Q.png" width=200, height=400>|<img src = "https://i.imgur.com/XGm5geJ.png" width=250, height=400>|

### AlertController 분리

DiaryViewController에 AlerController 생성 코드가 차지하는 비중이 높아 가독성을 떨어뜨린다고 판단하여, 파일을 AlertManager로 따로 분리 해주었습니다. 이렇게 분리하여 사용하게 되면 AlertManager가 파라미터로 DiaryViewController를 받게되는데 바람직한 구조인지 궁금합니다 !!

### textView.text 가 mainThread에서 ?

textView.text를 가져오는 과정이 mainThread에서 실행되어야 한다는 오류가 떳는데, UI를 업데이트 할때는 메인 스레드에 접근한다고 생이유를 모르겠어서 스택오버플로우 검색 결과 신경쓰지 않아도 된다는 내용이 있었습니다! 이 경우가 어떤 경우인지 궁금하여 질문 드립니다!
![](https://i.imgur.com/oQ4P8YN.jpg)
