2017-02-26 42 views
-1

在蘋果文檔閱讀本自定義只吸氣但不是目標C屬性的setter方法

如果你同時實現一個getter和用於讀寫屬性的設置,或只讀屬性爲getter,編譯器會假定您正在控制屬性實現,並且不會自動綜合實例變量。

我的屬性變量是

@property (weak, nonatomic) IBOutlet UILabel *notif; 

當我重寫getter和setter手動然後我不能夠訪問使用_notif變量,符合市場預期。使用_notif時會引發編譯時錯誤。

接下來,我在我的課只覆蓋吸氣劑(未setter方法)爲

@property (weak, nonatomic, getter=getMeNotif) IBOutlet UILabel *notif; 

我想兩件事訪問給定變量的值: 首先,

[self notif].text = @"testing"; 
NSLog(@"%@",[self getMeNotif]); 

其次,

_notif.text = @"testing"; 
NSLog(@"%@",[self getMeNotif]); 

在這兩種情況下,我在控制檯上得到空值。 我是否以錯誤的方式使用getter?

+0

重寫setter和/或getter並聲明setter/getter的不同名稱是不一樣的事情。 – Willeke

回答

0

第一個想法......

@property (weak, nonatomic, getter=getMeNotif) IBOutlet UILabel *notif; 

// ... 
[self notif].text = @"testing"; 

不能編譯,因爲它採用的是吸氣,notif,與申報的吸氣劑,getMeNotif不同意。

使用相同的財產申報第二個想法......

_notif.text = @"testing"; 
NSLog(@"%@",[self getMeNotif]); 

...應該工作,但前提是:(a)如果你指定的功能爲您定製的getter ,它必須返回實例變量...

- (UILabel *)getMeNotif { 
    // anything you want here 
    // but the function must end like this: 
    return _notif; 
} 

和(b)插座在IB中正確設置,以便_notif非空。要確定你的測試工作 - 而不是一個插座問題 - 試試這個:

_notif = [[UILabel alloc] init]; 
_notif.text = @"testing"; 
NSLog(@"%@",[self getMeNotif]); 
相關問題