我有一个可容纳一些信息的类,一个成员是属性 options (NSUInteger)。应该通过属性获取器和设置器来访问选项的各个位,以将其绑定到复选框:
#define OP_CHAN_TAG 12
@interface MuxConfig: NSObject
@property NSUInteger options;
@property (nonatomic) BOOL opTagBlocks;
@end
@implementation MuxConfig
- (BOOL) isOpTagBlocks
{
return (_options & (1 << OP_CHAN_TAG));
}
- (void) setOpTagBlocks:(BOOL)op
{
if (op)
_options |= (1 << OP_CHAN_TAG);
else
_options &= ~(1 << OP_CHAN_TAG);
}
@end
在此示例中,一个复选框具有绑定到 opTagBlocks 的值和一个将整个 options 属性发送到硬件设备的操作处理程序。此机制有效。应用程序的另一部分可以从所述设备接收选项,并将它们作为一个词存储在属性 options 中。我希望复选框已更新,但没有更新。显然,访问属性 options 不会“触发”按位选项处理程序。 因此,最大的问题是:我该如何进行这项工作?
答案 0 :(得分:1)
解决方案是为属性注册相关键。这是涉及此内容的文档:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVODependentKeys.html
因此在上面的示例中,添加
+ (NSSet *)keyPathsForValuesAffectingOptions {
return [NSSet setWithObjects:@"opTagBlocks",@"opTagWhatever",nil];
}
更改为opTagBlocks
的系统信号(以及第二个假设属性opTagWhatever
来显示如何向您添加其他标志)也会更改options
。
您还需要相反的操作,并指出对options
的更改也会影响opTagBlocks
:
+ (NSSet *)keyPathsForValuesAffectingOpTagBlocks {
return [NSSet setWithObjects:@"options",nil];
}
或者,您可以实现+ keyPathsForValuesAffectingValueForKey:
,请参见上面的文档。
答案 1 :(得分:0)
工作正常。看来
app.post('/token', function(options, res) {
return res.json()
});
需要更改为:
- (BOOL) isOpTagBlocks
{
return (_options & (1 << OP_CHAN_TAG));
}
非常引人注目的是因为文档指出布尔型吸气剂应以“ is”开头,但是KVO机制不接受。 关于返回值:检查0当然更好,但是从我所生活的嵌入式世界来看,任何非零的结果都可能会返回为布尔值。显然不在Objective-C中。