인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Mingyeong Seong님의 프로필 이미지
Mingyeong Seong

작성한 질문수

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

(기초-3) 가위바위보 앱 만들기 / 코드 설정하기 - 2 (기초 앱 12강)

(기초-3) 가위바위보 앱 만들기 / 코드 설정하기 - 2 (기초 앱 12강)

작성

·

58

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요. 주사위만들기 앱에서 viewDidLoad()를 다음과같이 정의하고 RESET 버튼을 눌렀을 때 viewDidLoad()를 호출해도 되나요? 작동은 하는데 비효율적이고 문제가 되는 부분이 있을 것 같은데 궁금합니다.


    override func viewDidLoad() {

        super.viewDidLoad()

        mainLabel.text = "선택하세요"

        // 1) 첫번째, 두번째 이미지 뷰에 준비 이미지를 띄워야 함

        comImageView.image =  imageLiteral(resourceName: "ready")

        myImageView.image = UIImage(named: "ready.png")

        // 2) 첫번째, 두번째 레이블에 "준비" 라는 문자열을 띄워야 함

        comLabel.text = "준비"

        myLabel.text = "준비"

    }

답변 1

0

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네 안녕하세요! 민경님!

아, 리셋버튼을 누르셨을때 viewDidLoad() 자체를 호출하시면 안됩니다.


왜냐면, 내부적인 메커니즘 때문에.. 보시면 아시겠지만.. 또 상위 클래스의 super.viewDidLoad( ) 도 호출하고 있죠? (내부적으로 viewDidLoad의 경우.. 화면에 진입했을때 앱 내부에서 자동으로 알아서 한번만 호출되게 되어있고, 직접 호출하는 것은 (동작할지라도) 금지되어 있습니다.


따라서, 아래처럼 셋팅 관련 코드들을 묶어서 메서드를 만들어 주시고,

func reset() {
     mainLabel.text = "선택하세요"
     comImageView.image = UIImage(named: "ready.png")
     myImageView.image = UIImage(named: "ready.png")
     comLabel.text = "준비"
     myLabel.text = "준비"
}

viewDidLoad에서도 호출되게 만들고..

override func viewDidLoad() {
    super.viewDidLoad()
    reset()
}


RESET 버튼을 눌렀을 때도 reset( )을 따로 호출해주는 것이 맞습니다. :)

 

고맙습니다. :)

Mingyeong Seong님의 프로필 이미지
Mingyeong Seong

작성한 질문수

질문하기