代码之家  ›  专栏  ›  技术社区  ›  Z S

keyPathsForValuesAffectingValueForKey未为所有属性调用

  •  2
  • Z S  · 技术社区  · 10 年前

    我试图观察实体中依赖于同一实体中其他属性的瞬态属性的变化。我想通过实施 keyPathsForValuesAffectingValueForKey: 问题是,这似乎并没有为实体中的所有属性调用。

    我的实体有10个属性和大约5-6个关系,keyPathsForValuesAffectingValueForKey被调用了5或6次,其中混合了一些属性和关系,但不是所有属性,包括我真正感兴趣的瞬时属性。

    + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
    {
        NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
    
        if ([key isEqualToString:@"todoSectionTitle"])
        {
            NSSet *affectingKeys = [NSSet setWithObjects:@"todoStatus", @"todoStartDate", @"timeNow", nil];
            keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
        }
        return keyPaths;
    }
    

    在这种情况下,keyPathsForValuesAffectingValueForKey被多次调用,但该键永远不是“todoSectionTitle”(一个暂时属性)。键也不等于“todoStatus”,尽管这是一个非瞬时属性。在其中一次调用时,密钥等于“todoStartDate”。也可以相等

    键路径值影响键值: 调用了哪些键,忽略了哪些键?医生们似乎对此没有任何解释。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Ken Thomases    10 年前

    +keyPathsForValuesAffectingValueForKey: 是关键价值观察(KVO)的一部分。KVO只需要在某个对象观察到实现它的类的实例上的某个键时调用它。(这包括间接观察到的任何键。例如,如果某个对象观测到键“a”,则它将调用键“B”的方法。如果它指示“a”的值受键“B)的影响,则它也将调用键(B)的方法,以查看其他一些键是否影响“B”值。)

    如果没有观察到 todoSectionTitle 或其值受 todo节标题 ,那么KVO没有理由打电话 +键路径值影响键值: 带有“todoSectionTitle”。事实上,KVO没有办法知道有这样一把钥匙。

    绑定是在KVO之上构建的,因此所有这些都适用于它们。