【问题标题】:How to implement key value observing of objects in an NSMutableArray如何实现 NSMutableArray 中对象的键值观察
【发布时间】:2011-01-22 18:12:51
【问题描述】:

我需要一些帮助来理解复杂的对象层次结构上的 KVO。让我设置场景。 MyClass 对象有一个包含 MyPerson 对象的可变数组属性。我想观察 MyClass 的 myPeople 属性的变化。此外,我还想观察 MyPerson 对象中包含的所有属性。这是类定义。

@interface MyClass:NSObject
{
   NSMutableArray *myPeople;
}

@property(nonatomic, retain)NSMutableArray *myArray;

@end

这里是 MyPerson 对象,

@interface MyPerson:NSObject
{
   NSString *myName;
   NSString *myLastName;
}

@property(nonatomic, retain)NSString *myName;
@property(nonatomic, retain)NSString *myLastName;

@end

以下方式观察我感兴趣的属性是否正确?

MyClass *myClass = [[MyClass alloc] init]; //myPeople is filled with myPerson objects

MySchool *mySchool = [[MySchool alloc] init];

[myClass addObserver:mySchool
      forKeyPath:@"myPeople"
             options:NSKeyValueObservingOptionNew
         context:NULL];

[myClass addObserver:mySchool
      forKeyPath:@"myPeople.myName"
             options:NSKeyValueObservingOptionNew
         context:NULL]; //I am unsure about this one

[myClass addObserver:mySchool
      forKeyPath:@"myPeople.myLastName"
             options:NSKeyValueObservingOptionNew
         context:NULL]; //I am unsure about this one

【问题讨论】:

    标签: cocoa key-value-observing


    【解决方案1】:

    不,这是不正确的。您必须单独观察添加到数组中的任何对象的属性。因此,每当一个对象被添加到数组中或从数组中删除时,您都必须在添加/删除的对象中添加/删除观察者。

    【讨论】:

    • 感谢您的快速回复。如果数组中的对象是字典(NSDictionary)怎么办。这种方法行得通吗?
    • 它不会改变任何东西。您可以在数组观察者上指定NSKeyValueChangeInsertionNSKeyValueChangeRemovalNSKeyValueChangeReplacement,以便在数组本身发生更改时收到通知,但无法自动通知数组内容的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多