2

Mountain Lion の新規インストールで Xcode 4.5 を使用しています。コンパイラは LLVM4.1 で、私のプロジェクトは ARC を使用しています。(私は過去に Xcode に手を出しましたが、しばらく触れていませんでした)。

私の質問:

Xcode の新しいバージョンでは、@synthesize ディレクティブを含める必要がなくなったことを理解しています (確かに、.xib の UI コンポーネントから .h ファイルに ctrl キーを押しながらドラッグすると、ディレクティブが作成されません) .m ファイル)、それらがないと、これらのプロパティにアクセスできず、代わりに「不明な受信者 xxx」エラーが発生します。

簡単な例:

ラベル ('myLabel') とボタン ('myButton') を持つシングル ビュー iPhone プロジェクトを作成しました。ViewController.xib の UILabel から ViewController.h に ctrl キーを押しながらドラッグして、次のプロパティを作成しました。

@property (strong, nonatomic) IBOutlet UILabel *myLabel;

ボタンアクションもドラッグアンドドロップで作成しました。

.m ファイルの myButton メソッドに次のコードを記述しました。

- (IBAction)myButton:(id)sender {
  NSLog(@"The label text is %@", [myLabel text]);
}

結果:

これにより、コンパイル時にエラーが発生します ("Unknown receiver myLabel")。

アンダースコア (つまり [_myLabel text]) を使用するか、「@synthesize myLabel;」を追加することで、引き続き自分のプロパティにアクセスできます。手動で.mファイルの先頭に追加しましたが、これを行う必要はないと思った、または自分で行う必要があると思いました。コードで私が間違っていることを誰かが説明できますか?

ありがとう

ps 私の .m ファイルには、上部に独自の @interface ブロックもあることに注意してください (おそらくプライベート変数を宣言するためですか?)

4

1 に答える 1

4

自動 ivar には、プロパティ名と区別するためにアンダースコアがプレフィックスとして付けられます。したがって、使用する必要があります_myLabel。デフォルトのプレフィックスが気に入らない場合は、次を使用してプロパティの ivar 名を変更できます。@synthesize

于 2012-11-04T09:01:15.887 に答える