【问题标题】:KVO on helper property辅助属性上的 KVO
【发布时间】:2014-09-11 23:31:34
【问题描述】:

我的类中有一个对象实例的属性

@property(nonatomic, strong) MyObject *myObject;

我公开了一个辅助属性。

@property(nonatomic, assign, readonly) BOOL hasMyObject

哪个

return self.myObject != nil;

我需要 hasMyObject 符合 KVO(我正在使用 RAC)。为了解决这个问题,我目前调用:

- (void)app_setMyObject:(MyObject*)myObject
{
    [self willChangeValueForKey:@keypath(self.hasMyObject)];
    self.myObject = myObject;
    [self didChangeValueForKey:@keypath(self.hasMyObject)];
}

每次我设置 myObject。

通过这种方式,观察者可以知道hasMyObject 何时发生变化。
我的问题是:
1.这样可以吗
2. 有没有更好的办法?


我为什么要这样做?
为什么不直接使用myObject 属性?

这是一个 API 设计的东西。 myObject 属性是内部的,不应公开公开,myObject 只能在类内设置。

【问题讨论】:

    标签: objective-c key-value-observing reactive-cocoa


    【解决方案1】:

    有一个更好的方法:

    + (NSSet *)keyPathsForValuesAffectingHasMyObject {
        return [NSSet setWithObject:@keypath(ClassName.new, myObject)];
    }
    

    当然,ClassName.new 从未被实际评估过(查看@keypath 的扩展),但它是从类方法中获取实例键路径的唯一方法。

    【讨论】:

    • 感谢您指出从未评估过 ClassName.new。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2016-08-20
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2019-08-04
    相关资源
    最近更新 更多