GUI元素不响应属性的变化

时间:2012-11-25 20:25:10

标签: objective-c xcode cocoa binding properties

我在我的app delegate中创建了一个bool类型的属性:

在AppDelegate.h中

@property(assign) BOOL myProp;
AppDelegate.m中的

@synthesize myProp;

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

  

self.myProp

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

3 个答案:

答案 0 :(得分:2)

当您分配给酒店时,是通过self.myProp = foo还是myProp = foo进行的?后者使用直接ivar访问,绕过KVO(键值观察,Bindings的基础组件)。你可以manually trigger KVO notifications,但更好的选择几乎总是通过setter方法分配(作为self。)并隐式得到automatic change notification

请注意,为了让它生成一个setter,您需要私下将您的属性重新声明为readwrite,您可以使用class extension来执行此操作。

答案 1 :(得分:1)

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

要设置BOOL,请使用self.myProp = YES/NO;

答案 2 :(得分:1)

enter image description here我试图以这种方式解决这个问题

在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);

}

目标按钮的已启用设置为App Delegate。

模型关键路径设置为self.myProp

它完成了!!!