Objective-C“多个”吸气剂和结合剂

时间:2020-02-14 14:15:18

标签: objective-c binding

我有一个可容纳一些信息的类,一个成员是属性 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 不会“触发”按位选项处理程序。 因此,最大的问题是:我该如何进行这项工作?

2 个答案:

答案 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中。