添加观察者以获取布尔值

时间:2011-10-18 16:15:56

标签: iphone objective-c ios observer-pattern

我正在尝试向对象添加一个观察者,并通过更改它的布尔值来触发它。

代码: 添加观察者:

[unitsCellViewController.cell addObserver:self forKeyPath:@"unit" options:0 context:nil];

在对象中,当文本字段发生变化时,我将更改布尔值并尝试触发通知:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length] != 0)
    {
        NSRange match = [@"0123456789" rangeOfString:string];
        if (match.location == NSNotFound) {
            return NO;
        }
    }

    [self willChangeValueForKey:@"unit"];
    self.on = !on;
    [self didChangeValueForKey:@"unit"];

    return YES;
}

但这不起作用,值确实发生了变化,但观察者没有被触发。 我这样做了吗?如果没有,如何在更改文本字段时触发事件?

1 个答案:

答案 0 :(得分:1)

您可以使用属性,并覆盖setter

在你的.h

@property (nonatomic, assign) BOOL myFlag;

在你的.m

@implementation

@synthesize myFlag = _myFlag;
...
..
.


- (void)setMyFlag:(BOOL)myFlag
{
if(myFlag != _myFlag){
_myFlag = myFlag;
[self postNotification];
}
}


-(void)postNofitication
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"nameOfNotification" object:nil];
}

并且当标志的值发生变化时执行操作。

希望这可以提供帮助。