4

シンプルなタブ付き iOS アプリを作成しています。それぞれ独自のView Controllerを備えた3つのタブがあります。各ビュー コントローラーで、同じ名前の変数を宣言します。

float nitriteLevel;

しかし、ある VC のナイトライト レベルの値を変更すると、他の VC のナイトライト レベルの値も変更されます。私が理解しているように、これはあってはならないことです。それらは完全に独立していて、無関係であるべきです。私は何を間違えたのでしょうか?

4

1 に答える 1

3

実装セクションの途中で宣言しますか?または @... @end ブロックの外側でも?もしそうなら、あなたはそれをグローバルにしました。これが可能なのは、Objective-C の下に Ansi C があるためです。

プライベート インスタンス変数の場合は、次のようにします。 MyClassName.h ファイル:

@interface MyClassName : ItsSuperclassName <SomeProtocol> {
    float nitriteLevel;
}

// if you want it private then there is no need to declare a property. 

@end

MyClasseName.m ファイル:

@implementation

// These days there is no need to synthesize always each property.
// They can be auto-synthesized. 
// However, it is not a property, cannot be synthesized and therefore there is no getter or setter. 

    -(void) someMehtod {

        self->nitriteLevel = 0.0f;  //This is how you access it. 
        float someValue2 = self->nitriteLevel; // That is fine. 

        self.nitriteLevel = 0.0f; // This does not even compile. 
        [self setNitriteLevel: 0.0f]; //Neither this works. 
        float someValue2 = self.nitriteLevel; // nope
        float someValue3 = [self setNitriteLevel]; // no chance

    }
@end

私は次の点について 100% 肯定的ではありません: このタイプの変数は自動的に初期化されていません。float nitriteLevel = 0.0f;その時点でご利用いただけません。init メソッドで必ず初期化してください。スタイルに応じて、viewDidLoad (View Controllers) で最新のものを初期化します。

于 2013-01-15T00:09:56.917 に答える