【问题标题】:Dynamically select property to observe with RAC使用 RAC 动态选择要观察的属性
【发布时间】:2015-06-27 11:14:27
【问题描述】:

我在一个视图中有很多 UISegmentedControls(实际上是 74 个),我想使用 RACChannel 与它们各自的模型属性进行双向绑定。为了减少代码,我想在运行时使用 IBOutletCollection 的枚举来分配这些绑定。

为了完成这项工作,我必须想出一种动态选择正确属性的方法。我的模型上有 74 个属性遵循以下命名约定:“item1a、item1b、item1c、item2a...”。

在每个 UISegmentedControl 上,我都有一个属性“名称”,我可以在运行时提取它以了解哪个控件应该绑定到哪个属性。

我想做的基本上是

RACCHannelTerminal *modelTerminal = RACChannelTo(self, "DYNAMIC PROPERTY NAME");

我可以通过

获取动态属性名称的值
[self valueForKey:@"item1a"];

但这并没有给出要观察的实际属性,只是一个值。

有什么方法可以做描述的事情吗?

【问题讨论】:

    标签: ios objective-c xcode reactive-cocoa


    【解决方案1】:

    从文档开始 - RACChanelTo - 只是一个宏,您可以将其重写为

    [[RACKVOChannel alloc] initWithTarget:<#(NSObject *)#> keyPath:<#(NSString *)#> nilValue:<#(id)#>]
    

    所以,不要使用 RACChanelTo(,) 使用

    RACCHannelTerminal *modelTerminal = [[RACKVOChannel alloc] initWithTarget:self keyPath:@"DYNAMIC PROPERTY NAME" nilValue:nil];
    

    警告

    来自 Reactive Cocoa 标头

    /// 不要直接使用这个。使用上面的 RACChannelTo 宏。

    定义 RACChannelTo_(TARGET, KEYPATH, NILVALUE) \

    [[RACKVOChannel alloc] initWithTarget:(TARGET) keyPath:@keypath(TARGET, KEYPATH)
    

    nilValue:(NILVALUE)][@keypath(RACKVOChannel.new, followingTerminal)]

    希望对你有帮助

    【讨论】:

    • 像魅力一样工作!只是通过将“.followingTerminal”添加到 RACKVOChannel 进行了一项更改。想知道为什么不直接使用该方法...
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2013-06-05
    • 2018-09-19
    相关资源
    最近更新 更多