2017-02-26 3 views
-1

は、リンゴのドキュメントは、あなたがゲッターと読み書きプロパティのセッター、または読み取り専用プロパティのゲッターの両方を実装する場合はObjective Cの内のプロパティのセッター

にコンパイラにこれを読むだけゲッターをカスタマイズしませんがプロパティの実装を制御しており、インスタンス変数を自動的に合成しないものとします。

マイプロパティ変数は

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

私は手動でゲッターとセッターをオーバーライドするとき、私は予想通り、_notifを使用して変数にアクセスすることはできませんしています。 _notifを使用するとコンパイル時エラーがスローされます。

次に、私は

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

として私のクラスで唯一のゲッター(ないセッター)をオーバーライド私は、与えられた変数の値にアクセスするには2つのことを試してみました: まず、

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

第二に、

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

どちらの場合でも、コンソールにはnullが返されます。 ゲッターを間違った方法で使用していますか?それが宣言ゲッター、getMeNotifに同意しないゲッター、notifを、使用しているため

+0

は同じものではありませんセッターおよび/またはゲッターをオーバーライドし、セッター/ゲッターに別の名前を宣言する。 – Willeke

答えて

0

最初のアイデア...

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

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

はコンパイルされません。

同じプロパティ宣言を使用して、第2のアイデア...

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

...動作するはずですが、場合のみ:カスタムゲッターのための機能を指定した(a)の場合、それは

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

...インスタンス変数を返し、_notifが非nullであるように、(b)のコンセントが適切にIBで設定されなければなりません。出口の問題とは対照的に、 - - 特定のテスト作品を作るために、これを試してみてください。

_notif = [[UILabel alloc] init]; 
_notif.text = @"testing"; 
NSLog(@"%@",[self getMeNotif]); 
関連する問題