NSControl의 속성을 변경하고 작업을 수행하는 방법은 무엇입니까?

2656 단어 코코아
NSSlider를 한꺼번에 배치한 애플리케이션을 만들어 보자.



구조는 매우 간단합니다.
* NSSlider의 값은 AppDelegate의 sliderValue 속성을 바인딩합니다.
* slider의 조작은 AppDelegate의 sliderAction에서 받는다

그림으로 보자.


구현도 간단하게.

setSliderValue
-(void)setSliderValue:(NSInteger)v
{
    NSLog(@"setSliderValue");

    if (_sliderValue == v)
        return;

    _sliderValue = v;
}

sliderAction
-(IBAction)sliderAction:(id)sender
{
    NSLog(@"sliderAction");
}

그래서 실행해 보았습니다.
2014-05-17 09:59:49.638 SliderActionAndBind[1832:303] setSliderValue
2014-05-17 09:59:49.639 SliderActionAndBind[1832:303] sliderAction
2014-05-17 09:59:52.174 SliderActionAndBind[1832:303] setSliderValue
2014-05-17 09:59:52.175 SliderActionAndBind[1832:303] sliderAction
2014-05-17 09:59:52.960 SliderActionAndBind[1832:303] setSliderValue
2014-05-17 09:59:52.960 SliderActionAndBind[1832:303] sliderAction
...

아무래도 프로퍼티의 변경→액션의 실행의 순서로 행해지는 것 같다. 다른 컨트롤은 시도하지 않고 실행할 때마다 바뀔 수 있습니다. 이 근처 Apple의 공식 문서의 어디에 쓰여져 있는 것일까・・・

원래 속성의 setter만으로 좋지 않아



액션과 프로퍼티를 따로 쓸 필요가 있는데, setter 안에 action의 처리 써도 같은 것은 아니다, 라고 하는 이야기도 있는데, 그렇다고도 말할 수 없는 문제가 일어난 것이 이번 의문의 발단.

이 근처에 대해서도 좀 쓰려고 생각했지만 조금 생각을 정리하고 나서 다른 기사에.

좋은 웹페이지 즐겨찾기