2014-02-21 51 views
1

我在使用ARC編寫Mac OS X程序時遇到了一個有趣的問題。我的.h文件中包含以下行:使用ARC時,屬性值在被賦予非零值後自動設置爲零

@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方法很好,配置文件被設置爲非零值。問題是,當.m文件中的其他方法嘗試訪問配置文件時,配置文件爲零。有誰知道我可能會做錯什麼?我改變

@property Profile *profile; 

@property (nonatomic, strong) Profile *profile; 

,仍然沒有運氣。謝謝大家。

+0

這甚至不會編譯。請發佈您正在使用的實際代碼。 – Sebastian

回答

0

我的猜測是變量名稱有衝突。有一個財產是一個不好的做法,它支持伊娃擁有相同的名稱。我不是10%的確定,但你的代碼可能被解釋爲有兩個不同的'個人資料'成員。

如果你的代碼中使用

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

通常變量後盾屬性前綴_,所以默認屬性profile與一個名爲_profile變量支持。

您可以通過使用@synthesize關鍵字來顯式設置支持變量來覆蓋默認行爲。

我只想刪除profile變量並離開屬性。還要在您的getter和setter中替換profile for _profile,如果編譯器仍然抱怨,請使用@synthesize。