2

ClassAとClassBの2つのクラスがあります

ClassA には、No に設定された BOOL 変数が 1 つあります。

この変数を ClassB から Yes に設定しようとしていますが、その方法がわかりません。

以下は私が使用している動作しないコードです。これは単に動作すると思っていたものであり、不要な情報を削除しました:

クラスA:

ClassA.h

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    BOOL boolean;
}

- (id) init;

ClassA.m

- (id) init {
    boolean = NO;
}

クラス B:

ClassB.h

#import "ClassA.h"

- (IBAction) setBoolean: (id)sender;

ClassB.m

- (id) init {
    ClassA * theClassA = [[ClassA alloc] init];
    return self;
}

- (IBAction) setBoolean: (id)sender {
    [theClassA boolean] = YES;
}

これが理にかなっていることを願っています。ClassAのBOOLブール値をClassBからYESに設定したいだけです。

4

1 に答える 1

4

そのようなプロパティを割り当てることはできません ( [object property] = value)。適切な構文は[object setProperty:value]orobject.property = valueです。

変数ブール値とは呼びません。誤解を招く可能性があります。Objective-C のブール変数のキーワードではありませんが、他の多くの言語にはあります。

そして、init メソッドで初期化されたオブジェクト (self) を返す必要があります (void ではなく、id の戻り値の型があります)。

- (id) init {
    self = [super init];
    if (self) {
        boolean = NO;
    }
    return self;
}

また、ClassB 実装で theClassA のインスタンス変数を指定していません。ローカル オブジェクトを作成してリークするだけです (解放しません)。代わりに、ClassB.h で宣言します。

@class ClassA;
@interface ClassB : NSObject {
    ClassA *theClassA;
}
- (IBAction)setBoolean:(id)sender;
@end

次に、次のように初期化します。

- (id) init {
    self = [super init];
    if (self) {
         theClassA = [[ClassA alloc] init];
    }
    return self;
}

そして、dealloc で解放することを忘れないでください:

- (void)dealloc {
    [theClassA release];
    [super dealloc];
}

最後にもう 1 つ。ClassB にメソッド- (IBAction) setBoolean: (id)senderがあるということは、ClassB に というプロパティがあることを意味しますが、booleanそうではありません。そのメソッドの名前を変更するか、クラスの設計を再考することをお勧めします。

于 2012-05-17T14:44:01.503 に答える