결과:
선택
버튼을 누르면 포토 라이브러리(갤러리)로 이어진다. 갤러리에서 이미지를 선택하면 해당 이미지를 가지고 온다.
[ 실패 하나 😢]
viewDidLoad에서 코드를 추가하면
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 프로토콜을 모두 구현하는 객체로 정의되어있다.
override func viewDidLoad() {
super.viewDidLoad()
imagePickerController.delegate = self
}
여기서 self를 UIImagePickerController.delegate에 할당하려면 self는 UINavigationControllerDelegate 타입이어야 한다.
지금, imagePickerController의 델리게이트를 UINavigationControllerDelegate에 위임해준 것인데, 대리자는 사용자가 이미지나 동영상을 선택하거나 imagePickerController 화면을 종료할 때, 알림을 받는다.
Apple이 제공하는 Documentation Archive에 입문자를 위해 앱을 만들어보는 튜토리얼이 있는데, Create an Image Picker to Respond to User Taps 이 부분부터 자료가 나와있습니다.