2013-02-22 5 views
3

키 값 코딩에 어떤 방법을 사용하는 것이 더 좋습니까? MyController 클래스에는 변수 myVariable이 있다고 가정합니다. 어떤 사람은 좋지 않은 의견과 왜 좋은 의견을 쓸 수 있습니까? 보기 첫 번째 부분의 내 관점에서 KVC는 어떤 접근 방식을 사용합니까?

[myController addObserver:self 
       forKeyPath:@"myVariable" 
        options:NSKeyValueObservingOptionNew 
        context:nil]; 

// Method in the MyController class. 
- (NSString*)myVariableKVC { 
    return NSStringFromSelector(@selector(myVariable)); 
} 

[myController addObserver:self 
       forKeyPath:[myController myVariableKVC] 
        options:NSKeyValueObservingOptionNew 
        context:nil]; 

1.

더 낫다. 하드 코딩 된 문자열이없고 Refactor -> Rename ...을 사용하여 이름을 바꿀 때 이름이 바뀝니다.

답변

3

-Wundeclared-selector (Xcode 이름 : "선언되지 않은 선택기", Xcode 빌드 설정 : GCC_WARN_UNDECLARED_SELECTOR)이 활성화 된 경우, 첫 번째 방법은 선택기의 이름을 변경하면 컴파일러에서 경고 메시지를 표시합니다 이는 선택자로 어디에서나 선언되지 않습니다.) 그리고 여러분이 지적 하듯이, 이것은 하드 코딩 된/"마법"문자열을 약간 줄입니다. 그래도 난 그것에 대한 별도의 방법을 가지고 귀찮게하지 것입니다, 난 그냥 이렇게 :

[myController addObserver:self 
       forKeyPath:NSStringFromSelector(@selector(myVariable)) 
        options:NSKeyValueObservingOptionNew 
        context:nil]; 

이 경고는 하지 내가 보았던 Xcode 프로젝트 템플릿에서 기본적으로, 당신은이 검사를 원한다면, 프로젝트의 경고를 수동으로 켜야합니다.

첫 번째 메서드가 다른 함수 호출 (질문에 나타난대로 선택기를 반환하는 ObjC 메서드가있는 경우에는 ObjC 메시지 보내기)을 발생한다는 점을 제외하고는 경고가 없어도 차이가 없습니다. 나는이 경고가 기본적으로 켜져 있었지만 기분이 바뀌 었다고 생각합니다.

+0

이것은 실제로 잘못되었습니다. 선택기 이름에 오타가 있으면 컴파일러에서 경고를 생성하지 않습니다. 그것은 하드 코딩 된 마술 문자열을 사용하는 것과 다르지 않습니다. – Darren

+0

아, 네 말이 맞아. 나는 "알려지지 않은 선택자"경고를주는 데 사용 된 것 같은 기분입니다. 아마도 혼란 스러울 지 모르겠습니다. 오 잘. 후손을 위해 편집 됨. – ipmcc

+0

엄격한 컴파일러 경고가있는 경우 (필요한 경우) 해당 선택기가 어디에도 존재하지 않으면 오류가 발생합니다. –

관련 문제