[TIL] Today I Learned 2020.02.07

Lena·2020년 2월 7일
0

TIL (Today I Learned)

목록 보기
2/19
post-thumbnail

오늘 한 일

  1. iOS 앱 - 디바이스의 앨범에서 사진을 가지고 오는 기능 구현
  2. git cherry pick 시도 및 실패
  3. README.md에 사진액자 앱 구현에 대한 전반적 내용 수정

새롭게 알게 된 것

  1. 새로운 구현과 공부의 균형점을 찾는 방법

    📖 *’공부-> 코드 구현’ 사이클의 주기가 너무 길어지기 보다는 하루-이틀 단위로 줄여보기. 모든 단계와 과정을 다 알거나 구현해보고 공부하는건 불가능하다. 즉, 공부와 구현을 완전 구별해서 하는 건 어렵다. 적어도 한 단계가 끝날때마다 혹은 단계에서도 문제해결에 필요한 것만 공부하고 또 만들고, 공부하고 만들고 반복하는 게 좋다. 같은 주제에 대해서도 4시간 이상 헤매거나 정리가 안되면 일단 덮어주는 게 낫다. 4시간이 아니더라도 자기의 기준으로 스스로도 한 번 정해보자 **

  2. info는 Dictionary로 이뤄져 있고 type, url, originalImage를 키로 갖는 3쌍으로 이뤄져 있다. 그래서 갤러리에서 사진을 가져올 때,Info Dictionary에서 UIImagePickerControllerOriginalImage를 키로 가지는 값을 가지고 오면 UIImage를 얻을 수 있다.

  3. 사진 라이브러리(갤러리, 사진첩)에서 이미지를 선택해서 가지고 오는 메소드를 구현해도 이미지를 선택하는 화면을 dismiss 하지 않으면 이전 화면으로 돌아가지 않는다.

  4. 사진 라이브러리(갤러리, 사진첩)에서 이미지 가져올 때 필요한 부분

    3-1. viewController 인스턴스 생성
    3-2. Delegate 지정
    3-3. 버튼 선택시 사진 라이브러리가 present
    3-4. extension으로 관련 Deletage를 채용
    3-5. extension한 부분에 imagePickerController() 메소드 (사진 라이브러리에서 사진을 선택해 가지고 옴)

오늘의 실패와 결론

[ 실패 하나 😢]

viewDidLoad에서 코드를 추가하면

// swift
imagePickerController.delegate = self

Cannot assign value of type 'SecondViewController' to type '(UIImagePickerControllerDelegate & UINavigationControllerDelegate)?' 이라는 메세지의 에러가 발생한다.
[ 결론 👩‍💻 ]
ViewController의 extension 생성해주지 않아서 에러가 난 것이었다. 따라서 UIImagePickerControllerDelegate, UINavigationControllerDelegate를 상속받은 extention을 생성해준다.

[ 실패 둘 😢]
카메라롤에서 사진을 선택한 후 이전 화면으로 돌아가지 않았다.

[ 결론 👩‍💻 ]

dismiss(animated: true, completion: nil)

사진을 선택하는 화면을 dismiss하는 코드를 추가한다.

궁금한 점

🧐❓: 사진 라이브러리(갤러리)에서 이미지를 가지고 오는 과정에서 Delegate 는? 위임 관계는 어떻게 될까? 무엇을 위임하는 걸까?

😁 ❗️
... 찾아서 업데이트 할 예정.

🧐❓:UIImagePickerControllerDelegate를 채택 할 때 UINavigationControllerDelegate도 채택해야하는 이유는?

😁 ❗️
UIImagePickerControllerDelegate의 delegate 속성은 UIImagePickerControllerDelegate와 UINavigationControllerDelegate 프로토콜을 모두 구현하는 객체로 정의되어있다.

// swift
 override func viewDidLoad() {
        super.viewDidLoad()
     imagePickerController.delegate = self
}

여기서 self를 UIImagePickerController.delegate에 할당하려면 self는 UINavigationControllerDelegate 타입이어야 한다.

지금, imagePickerController의 델리게이트를 UINavigationControllerDelegate에 위임해준 것인데, 대리자는 사용자가 이미지나 동영상을 선택하거나 imagePickerController 화면을 종료할 때, 알림을 받는다.

내일 + 주말에 할 일

  1. Delegate Pattern에 대해서
  2. 디자인 패턴이란? 그리고 디자인 패턴을 쓰는 이유는?
  3. iOS 에서의 MVC 패턴
  4. Window - View - View Controller와의 관계
    4-1. 관련내용 Apple 공식문서 읽기
    https://developer.apple.com/documentation/uikit/view_controllers/managing_content_in_your_app_s_windows
  5. 다음 미션 시작
  6. Apple Catalog
    https://developer.apple.com/documentation/uikit/views_and_controls/uikit_catalog_creating_and_customizing_views_and_controls

느낀점

😢

다른 사람과 비교하는게 유익하지 않다는 걸 알면서도 일단 옆에 있거나 눈에 보이면 어쩔 수 없는것 같다. 해야할 건 많은데 어떻게 접근해야할지 방법을 찾기가 어렵다.

실패는 할 수록 배운다고 하니까 공부와 코드 구현의 밸런스를 찾는 방법도 10번은 시도할 각오로 계속 시도해봐야겠다.

오늘 느낀거는 너무 막막하고 뒷쳐져서 짜증이 나도 계속 일단 붙잡고 계속 하면 느리더라도 진행은 된다는 거다.

선배와의 만남에서 정말 아무것도 하기 싫거나 집중력이 떨어졌을 때 인강이라도 보면서 정리하고 예제 코드를 적었다고 해서 요 며칠 따라해봤는데 좋은 것 같다. 일단 머리는 쓰지 않아도 되지만 공부한 흔적이나 나중에 참고할 게 생기니까 마음이 편하다.

profile
Swift, iOS 앱 개발 공부하고 있어요!

0개의 댓글