0

我在我的应用程序委托中创建了一个 bool 类型的属性:

在 AppDelegate.h 中:

@property(assign) BOOL myProp;

在 AppDelegate.m 中:

@synthesize myProp;

然后在 XIB 文件中,我为按钮的 Enabled 属性打开了绑定编辑器。我已启用绑定并将其设置为“App Delegate”。对于我选择的模型密钥路径:

self.myProp

当我运行应用程序并切换我的属性值时,什么也没有发生。该按钮不会更改其启用状态。为什么?

4

3 回答 3

2

当您分配给该属性时,您是通过self.myProp = foo还是myProp = foo?后者使用直接 ivar 访问,它绕过了KVO(Key-Value Observing,Bindings 的基础组件)。您可以手动触发 KVO 通知,但更好的选择几乎总是通过 setter 方法(如 self. 所做的那样)分配并隐式获取自动更改通知。

请注意,为了让它生成一个 setter,您需要私下将您的属性重新声明为 readwrite,您可以使用类扩展来做到这一点。

于 2012-11-25T21:26:46.563 回答
1

首先它应该被声明为 BOOL,其次你已经将它声明为只读(如果你想改变你必须删除只读的值)

设置您使用的 BOOLself.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 回答