2014-02-21 1 views
1

Mac OS X 프로그램을 작성할 때 ARC를 사용하고 있는데 흥미로운 문제가 있습니다. 다음과 같이 .H에 선언ARC를 사용할 때 속성 값이 nil이 아닌 값으로 지정되면 자동으로 nil로 설정됩니다.

@property Profile *profile; 

(void) setProfile:(Profile *) newProfile; 

(Profile *) profile; 

및 변수 프로필 : 내 .H 파일에는 다음 줄이 포함

Profile *profile; 

내하는 .m 파일은 등록 정보에 대한 다음과 같은 구현이 있습니다

(void) setProfile:(Profile *) newProfile 
{ 
    profile = newProfile; 

    if (profile) 
    { 
     [profileNameTextField setStringValue:profile.name];   
    } 
} 

(Profile *) profile 
{ 
    return profile; 
} 

setProfile 메서드가 훌륭하게 작동하면 프로필이 nil이 아닌 값으로 설정됩니다. 문제는 .m 파일의 다른 메소드가 프로파일에 액세스하려고하면 프로파일이 nil이라는 것입니다. 아무도 내가 뭘 잘못하고 있을지 알아? 나는 아직도

@property (nonatomic, strong) Profile *profile; 

과 행운에

@property Profile *profile; 

을 변경했습니다. 모두에게 감사드립니다.

+0

이것은 컴파일되지 않습니다. 사용중인 실제 코드를 게시하십시오. – Sebastian

답변

0

내 이름은 변수 이름에 충돌이있는 것 같습니다. 재산을 소유하는 것은 나쁜 습관이고 그것은 뒷받침하는 ivar가 같은 이름입니다. 10 % 확신 할 수 없지만 코드가 두 개의 다른 '프로필'멤버로 해석 될 수 있습니다.

코드에서 당신이 재산 profile_profile라는 변수와 함께 백업됩니다 기본적으로하도록 속성, _로 시작되는

x = profile; // access to the variable 
x = self.profile // access the property 

보통 변수 지원을 사용하는 경우.

키워드를 사용하여 기본 변수를 명시 적으로 설정할 수 있습니다.

나는 profile 변수를 삭제하고 속성을 그대로 남겨 두었습니다. 또한 getter 및 setter에서 _profileprofile을 바꿔야하며 컴파일러가 여전히 불만을 나타내면 @synthesize를 사용하십시오.