4

それはそれと同じくらい簡単です。

走るライオン。

  1. XCode 4.4にアップグレードしました
  2. 最新の XCode 4.3 プロジェクト ファイルをロードしました
  3. @synthesize コードの 1 行をコメントアウトしました
  4. とエラーが多発します。:(

検証済みコンパイラは「LLVM 4.0」に設定されています。

次に、同じテストを行いましたが、XCode 4.4 内で新しいプロジェクトを作成しました。Auto @synthesize は 4.4 プロジェクト内で機能します。

Auto @synthesizeは、コードに追加された新しいプロパティで機能するようです。しかし、既存の古いものはエラーを生成します。

他の誰かがこれを経験していますか?他に確認すべきことはありますか?

自動生成機能が機能することを本当に望んでいます。

ありがとう。

4

3 に答える 3

5

エラーは、プロパティを宣言する方法ではなく、使用する方法にあります。

自動合成されたプロパティは、デフォルトで先頭にアンダースコアが付いたバッキング ストアを作成します。

したがって、コードで次のように宣言されたプロパティがある場合:

@property (nonatomic, strong) UILabel *sectorLabel;

そしてあなたは自動合成します - このようなものがコンパイラによって自動生成されています:

@synthesize sectorLabel = _sectorLabel;

これで、プロパティを介してアクセスできます。

self.sectorLabel;

または、次の方法でバッキング ストアに直接アクセスできます。

_sectorLabel;
于 2012-07-29T21:26:37.473 に答える
1

解決しました!

これが私がしたことです。

ViewController.h

@interface ViewController : UIViewController
// Public:

@property (nonatomic, strong) UILabel *sectorLabel;

@end

ViewController.m

@implementation ViewController

//@synthesize sectorLabel;

そして、このエラーがポップアップしました。

ViewController.m:48:2: 宣言されていない識別子 'sectorLabel' の使用。「_sectorLabel」のことですか?

コードを次のように変更した瞬間に解決しました。

self.sectorLabel

XCode 4.3 は、「自己」を持つ必要なく、正常にコンパイルおよび動作しました。キーワード。しかし、XCode 4.4 ではより厳密になったようです。

于 2012-07-29T21:06:29.680 に答える
0

受け入れられた回答の問題は、self.property を追加してコードの動作を変更したことです。

ivar へのアクセスとプロパティへのアクセスは、2 つの異なることです。正解は、アンダースコアを追加して ivar を正しく使用するようにコードを変更することです。

これは厳密さに関するものではなく、xcode のデフォルトのプロパティ合成に対する変更に関するものです。また、ほとんどのスタイル ガイドでは、Apple が _ivar 名を推奨しないと書かれているので、それは窓の外だと思います。

私のコードでは、self のみを使用しています。プロパティのゲッターとセッターを介してアクセスするつもりの場合。この動作のために既存のコードを変更しないのは時間の無駄です。

于 2012-08-02T05:35:58.770 に答える