0

アプリのデリゲートに bool 型のプロパティを作成しました。

AppDelegate.h で:

@property(assign) BOOL myProp;

AppDelegate.m で:

@synthesize myProp;

次に、XIB ファイルで、ボタンの Enabled プロパティのバインディング エディターを開きました。バインディングを有効にして、「App Delegate」に設定しました。私が選択したモデル キー パスの場合:

self.myProp

アプリケーションを実行してプロパティの値を切り替えても、何も起こりません。ボタンは有効状態を変更しません。なんで?

4

3 に答える 3

2

プロパティに割り当てるとき、または経由で行いますself.myProp = foomyProp = foo? 後者は、KVO (バインディングの基盤コンポーネントである Key-Value Observing) をバイパスする ivar への直接アクセスを使用しています。手動で KVO notifications をトリガーすることもできますが、ほとんどの場合、(self. のように) setter メソッドを介して単に割り当て、自動変更通知を暗黙的に取得することをお勧めします。

セッターを生成するには、プロパティを非公開で readwrite として再宣言する必要があることに注意してください。これは、クラス拡張機能を使用して行うことができます。

于 2012-11-25T21:26:46.563 に答える
1

最初に BOOL として宣言し、次に読み取り専用として宣言する必要があります (値を変更する場合は、読み取り専用を削除する必要があります)。

使用する BOOL を設定するにはself.myProp = YES/NO;

于 2012-11-25T20:30:28.280 に答える
1

ここに画像の説明を入力私はこの方法でこれを解決しようとしました

AppDelegate.h 内

@property (assign)BOOL myProp;
- (IBAction)onOff:(id)sender; //to switch the value of myProp

AppDelegate.m 内

@synthesize myProp;

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

- (IBAction)onOff:(id)sender {
    NSLog(@"before myProp=%d",myProp);
    self.myProp=!myProp;
    NSLog(@"after myProp=%d",myProp);

}

ターゲット ボタンの Enabled は App Delegate に設定されます。

モデル キー パスが self.myProp に設定されている

そして完成!!!

于 2012-11-26T07:16:59.513 に答える