2

最新の SDK を使用して iOS アプリを開発しています。

から継承するクラスを作成しましたがUIView、クラスがインスタンス化されるたびに初期化を行う必要があります。

呼び出されたメソッドを呼び出さsetUpVars:なければなりませんが、そのメソッドにメッセージを送信する場所がわかりません:

- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;

このクラスは、カスタム xib で使用したり、ストーリーボードに追加したりできるため、すべてのケースでそのメソッドが呼び出されるようにする必要があります。

- (void)setUpVars
{
    _preferenceKey = @"";
    _preferenceStatus = NO;
    _isDown = NO;
}

どこに追加する必要があり[self setUpVars];ますか?

4

5 に答える 5

2

基本的に、両方のケースをカバーしたいと思うでしょう

- (id)initWithFrame:(CGRect)frame;
{
  self = [super initWithFrame:frame];
  if (self) {
    [self setUpVars];
  }
  return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder;
{
  self = [super initWithCoder:aDecoder];
  if (self) {
    [self setUpVars];
  }
  return self;
}
于 2013-03-12T09:53:25.843 に答える
0

それぞれの方法からこのメッセージを送る必要があると思いますが、方法も忘れないでくださいawakeFromNib

BOOLのような変数を作成し、メソッドisAlreadySetupで設定できます。YESsetUpVars

于 2013-03-12T09:16:52.087 に答える
0

Interface Builder を使用してインターフェイスを設計するinitWithFrame場合、ビュー オブジェクトが後で nib ファイルからロードされるときに : は呼び出されません。代わりinitWithCoderに呼び出されます。したがって、一般的な方法を好む場合は、両方の方法で変数を初期化できます。どちらの場合でも機能します

于 2013-03-12T09:23:46.247 に答える
0

ドキュメントは言う

awakeFromNib

Interface Builder アーカイブまたは nib ファイルから受信機をロードした後、受信機をサービス用に準備します。

- (void)awakeFromNib
{
 [self setUpVars];
}
于 2013-03-12T09:24:54.977 に答える
-1

担当のコントローラーの-(void)viewDidLoadメソッドからこのメソッドを呼び出すべきだと思う傾向があります

于 2013-03-12T09:21:16.903 に答える