Timer 클래스의 selector 선언 방법 질문

안녕하세요. 저희 프로젝트에서 Timer 클래스를 사용하기 위해 Timer의 initializer인

scheduledTimer(timeInterval:target:selector:userInfo:repeats:)

함수를 사용하려고 하는데요,

다른 UI 요소들에서는 #selector를 사용하여 인자로써 함수를 전달하는 방식이 잘 되었는데 Timer에서 같은 방법을 사용하니

unrecognized selector sent to instance ...

이런 에러가 발생합니다.

혹시 Timer 클래스에서 selector를 성공적으로 전달하신 분께서 도움 주시면 정말 감사하겠습니다…!

제가 에러가 발생한 코드는 다음과 같습니다.

@objc func fireMethod()
{
    print("Here!\n")
}
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fireMethod), userInfo: nil, repeats: true)
좋아요 1

에러가 발생하는 부분이 보이지 않네요.

테스트한 코드를 올립니다.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @objc func fireMethod() {
        print("Timer2")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
            print("Timer1")
        }
        
        Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(fireMethod), userInfo: nil, repeats: true)
    }
}

이 함수 사용도 고려해보세요.

func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) -> Timer
좋아요 2

셀렉터에 아래와 같이 클래스도 작성해보세요.

#selector(ViewController.fireMethod)

그리고 에러 메세지 전체(스택 구조는 제외)를 올려주세요.

좋아요 2

여태 해결 못해서 그냥 다른 형태의 함수 (selector 대신 block 쓰는 버전)으로 해결했었는데, 오랜만에 라운지 들어와서 다시 해보니까 selector 버전이 정상 작동 되네요… 이유는 모르겠습니다…

답변해주셔서 감사합니다!!

좋아요 1