【问题标题】:KVO for manually implemented propertiesKVO 用于手动实现的属性
【发布时间】:2012-04-20 00:26:47
【问题描述】:

根据Ensuring KVC Compliance

对于属于属性或一对一关系的属性,这要求您的类:

  • 实现一个名为-<key>-is<Key>的方法,或者有一个实例变量<key>_<key>

将观察者添加到如下“FAKE”属性的最佳方法是什么?

@property (nonatomic, readonly) BOOL shortlisted; 

#pragma mark - Fake properties

- (BOOL)shortlisted
{
    return [self.provider isJobShortlisted:self];
}   

【问题讨论】:

    标签: ios key-value-observing


    【解决方案1】:

    依赖键

    如果您只是有一个键依赖于同一对象的另一个键,您可以覆盖+keyPathsForValuesAffectingValueForKey:。 (另请参阅 this article 了解常见的陷阱。)

    KVO 文档包含有关依赖于其他对象的键的信息,但不幸的是,它看起来仅在 OS X(而非 iOS)上具有内置支持。

    手动通知

    如果您要实现完全自定义的属性,KVO 文档中的Manual Change Notification 部分包含您需要的所有信息。关键点是(引用文档):

    【讨论】:

    • 不,它在我之前实施!嗯,但“入围”属性具有“只读”修饰符...
    • @InjectIOS 很好——KVO 仍然需要知道何时发送通知。当您执行会更改值的操作时,您会在内部调用此方法。
    • @InjectIOS 我想我可能会理解你的担忧——查看我更新的答案,看看是否有帮助。
    • 其实我在寻找最好的方法——使用通知,或者像你说的那样在 VC 中使用代理
    • @InjectIOS 我认为你的逻辑是倒退的。我建议您在每个作业上使用@property BOOL shortlisted;@synthesize shortlisted,然后-isJobShortlisted: 将返回shortlisted 属性的结果。如果没有更多的上下文信息,很难提供进一步的建议。
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多