我正在实施一个DocumentsManager
iOS 中的类,我想创建一个名为的多对多属性documents
符合 KVO 要求。它似乎大部分工作,并且我的 KVO 访问器和修改器方法被调用。然而,令我困扰的是,直接在NSMutableArray
调用返回的代理mutableArrayValueForKey:
在我的例子中不会通知观察者。
所以,这段代码通知我插入@"aaa"
但不属于@"bbb"
,尽管它们实际上都插入了可见中docsProxy
。这是预期的行为吗?如果是这样的话,使用它的好处是什么?mutableArrayValueForKey:
method?
NSMutableArray *docsProxy = [[DocumentsManager instance] mutableArrayValueForKey:@"documents"];
[[DocumentsManager instance] addObserver:self forKeyPath:@"documents" options:NSKeyValueObservingOptionNew context:NULL];
[[DocumentsManager instance] insertObject:@"aaa" inDocumentsAtIndex:0]; // OK
[docsProxy insertObject:@"bbb" atIndex:0]; // no notification!
事实证明mutableArrayValueForKey:
并不总是返回通知数组。仅当观察者已经在被观察对象上注册时才会这样做!
因此,交换我的前两行可以解决问题:
[[DocumentsManager instance] addObserver:self forKeyPath:@"documents" options:NSKeyValueObservingOptionNew context:NULL];
NSMutableArray *docsProxy = [[DocumentsManager instance] mutableArrayValueForKey:@"documents"];
不禁会想,如果我们能够阅读这些方法的源代码,我们会节省多少时间……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)