Привязки какао используют Наблюдение значения ключа (KVO) для получения уведомления об изменениях в объектах модели. Чтобы изменения в модели (ваше значение BOOL
) были замечены наблюдателями, включая любые виды, использующие привязки, вы должны обновить модель, используя Кодирование значения ключа - совместимые методы доступа. Если вы просто установите значение ivar напрямую, уведомления KVO отправляться не будут.
Вы можете либо реализовать средства доступа KVC самостоятельно, либо объявить свойство и использовать ключевое слово @synthesize
в своей реализации, чтобы компилятор создал совместимые средства доступа для вас.
Вот как бы вы реализовали средства доступа, совместимые с KVC:
//YourModel.h
@interface YourModel : NSObject
{
BOOL enabled;
}
- (BOOL)enabled;
- (void)setEnabled:(BOOL)flag;
@end
//YourModel.m
@implementation YourModel
- (BOOL)enabled
{
return enabled;
}
- (void)setEnabled:(BOOL)flag
{
enabled = flag;
}
@end
и вы можете сделать то же самое, используя синтаксис свойства Objective-C 2.0:
//YourModel.h
@interface YourModel : NSObject
{
BOOL enabled;
}
@property BOOL enabled;
@end
//YourModel.m
@implementation YourModel
@synthesize enabled;
@end
Затем вы можете позвонить [yourModel setEnabled:YES]
, и любые зарегистрированные наблюдатели КВО (включая привязку вашего меню) будут проинформированы об изменении.
Кроме того, вы можете позвонить yourModel.enabled = YES
, который будет использовать надлежащие средства доступа KVC, если они доступны.
Я загрузил пример проекта , чтобы продемонстрировать, как это делается.