UIStepper 를 배우는 와중에 발생했던 여러 상황들..

EenSung Kim·2023년 12월 18일

iOS 앱개발 공부

목록 보기
3/10

이거슨 초보자의 본격적인 삽질하기...

UIStepper 를 적용하는 과정에서 마주했던 여러 삽질의 과정들을 기록해 보았습니다. 도움이 되면 좋겠습니다.


Terminating app due to uncaught exception

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 블라블라 
unrecognized selector sent to instance 0x10504a600

에러 메시지를 복붙해 구글링해봤지만 제가 지금 마주한 이 상황에 딱 어울릴만한 주제는 없었습니다. 처음에는 어떤 이유로 이 에러가 뜨는지도 알 수가 없었는데요. 여러 삽질을 해본 결과 발견한 문제는 다음과 같았습니다.

- @IBAction 메서드에 throws 를 붙어있으면 해당 에러가 발생, throws 를 제거하면 문제 해결

실제 에러의 발생 여부와는 관계 없이 throws 구문이 @IBAction 메서드 선언부에 포함된 경우 위와 같은 에러가 발생하더라구요. do catch 를 활용해서 throws 를 제거하고 에러를 핸들링하자 위 문제는 해결되었습니다.

// throws 가 붙어있으면 Terminating app due to uncaught exception 에러 발생
@IBAction func someStepperTapped(_ sender: UIStepper) throws {
    try someFunction()
}

// throws 를 제거하고 do catch 로 에러를 처리하면 문제 해결
@IBAction func someStepperTapped(_ sender: UIStepper) {
    do {
    	try someFunction()
    } catch {
        print(error)
    }
}

스테퍼 기본값은 어떻게?

UIStepper 개발자 문서를 보면 value 라는 속성으로 스테퍼의 숫자 값에 접근할 수 있다고 되어있는데요. value 를 눌러서 확인해보니 속성의 기본값은 0이라고 하더라구요.

제가 구현하고자 했던 것은 재고 관리 기능을 위한 스테퍼였기 때문에, 스테퍼의 기본값이 0이 아닌, 현재 재곳값이 표시되기를 바랐습니다. 얼핏 보면 그냥 이 속성을 수정해주면 될 것 같아보였죠.

근데 문제가 발생합니다. 스테퍼를 누를 때마다 고정된 재곳값이 표현되는 겁니다. 뭐 이유는 간단합니다. 해당 메서드가 호출될 때마다 스테퍼의 value 속성을 고정해 주었으니, 당연히 반영이 되지 않는 거죠.

@IBAction func someStepperTapped(_ sender: UIStepper) {
    sender.value = 10
    // 아무리 여기에서 작업을 해도 위에서 sender.value 를 10으로 고정해 주었던 것
}

스테퍼의 기본값을 변경해 주려면, 스테퍼와 연결된 @IBOutlet 변수를 하나 생성해서, 이 아웃렛 변수의 value 속성을 변경해 주면 됩니다. 저는 기존에 있던 재곳값을 불러와서 이 value 속성에 연결해 주는 것으로 문제가 해결되었습니다.

@IBAction weak var someStepper: UIStepper!
let currentStockAmount = 10

someStepper.value = currentStockAmount

그 외에도..

재고관리 클래스의 메서드를 만들 때 매개변수를 기존 재고에 더하도록 구현한 탓에, 스테퍼와 연동이 이상하게 이루어졌던 문제라든지..
기본값과 기존 재고에 더해주는 작업이 중복되고 있다는 점을 놓쳐서 기본 값이 두배가 된 것처럼 보이는 문제라든지...

여러 삽질을 했었습니다만, 기록하기 위해 다시 시도해보는 과정 중에 정리된 것들(이라고 쓰고 말도 안되는 착각이라고 읽는)이 많네요.

적기엔 차마 부끄러워서 이쯤 마칠까 합니다. 그래도 이 기록으로 도움을 받는 분들이 있으셨으면 좋겠네요.

profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글