2014-06-17 2 views
0

Mac app 인 데이터베이스 마이그레이션 도구를 구축하고 있으며 속성에 대한 getter/setters를 만드는 데 이상한 문제가 있습니다.사용자 정의 가져 오기 도구가 사용자 정의 가져 오기 도구를 손상시키는 이유는 무엇입니까?

- (CCStore *)parentStore { 
    if (!_parentStore) { 
     _parentStore = [[CCStore alloc] initWithStoreID:self.storeID]; 
    } 

    return _parentStore; 
} 

아주 정직하고, 아무 문제가 : parentStore라는 이름의 속성에 대해

는,이 게터 있습니다.

이제 맞춤 설정 도구를 만들 때 Xcode가 나에게 불어납니다. I 더 빨리 엑스 코드보다는이 세터에 서명을 입력 완료

- (void)setParentStore:(CCStore *)parentStore { 

} 

게터 최대 _parentStore 상기의 사용이 선언되지 않은 식별자임을 주장한다. 나는 잠자는 시간에 달리기 때문에 그냥 바보 같은 짓을 할 수는 있지만 무슨 일이 일어나는지 알 수 없다 !!!

스크린 샷은 다음과 같습니다 : 당신이 게터와 세터 모두를 오버라이드 (override)하는 경우

enter image description here

답변

2

, 당신은 기본적으로 당신이 LLVM은 합성 백업 바르를 제공하지 않으려한다는 것입니다. 당신이 그것을 사용할지 안할 지 모르기 때문에 낭비 일 것입니다.

그냥 클래스의 바르 자신을 선언 : 당신이 세터를 무시하기 때문에

@implementation MyClass 

@synthesize parentStore = _parentStore; 

- (CCStore *)parentStore 
{ 
    if (!_parentStore) { 
    _parentStore = [[CCStore alloc] initWithStoreID:self.storeID]; 
    } 
    return _parentStore; 
} 

- (void)setParentStore:(CCStore *)parentStore 
{ 
    // do nothing 
} 

는,이 읽기 전용 속성 만드는 가장 좋은 방법입니다 다음에서 모든 세터를 정의하지.

+1

'@ dynamic'은 속성 접근자가 * runtime *에서 제공되며 여기서는 필요하지 않음을 의미합니다. ivar * 또는 *을 명시 적으로 선언하는 것으로 충분하다. @synthesize parentStore = _parentStore'. –

+0

@ MartinR은 정확합니다.'@ dynmaic'은 필요하지 않습니다. 할당 된 신디사이저를 반영하도록 답변을 업데이트하겠습니다. 우리는 추상 클래스 팩토리 패턴을 사용하고 구체적인 하위 클래스의 실제 속성을 정의합니다. –

관련 문제