相关疑难解决方法(0)

如何判断对象是否附加了键值观察器

如果你告诉一个目标c对象removeObservers:对于一个关键路径并且该关键路径尚未注册,它会破坏sads.喜欢 -

'无法删除关键路径"theKeyPath"的观察者,因为它未注册为观察者.

有没有办法确定一个对象是否有一个注册的观察者,所以我可以做到这一点

if (object has observer){
  remove observer
}
else{
  go on my merry way
}
Run Code Online (Sandbox Code Playgroud)

cocoa key objective-c key-value-observing

141
推荐指数
3
解决办法
6万
查看次数

如何在UIView的帧上进行键值观察并获得KVO回调?

我想看了在变化UIViewframe,boundscenter财产.我如何使用Key-Value Observing来实现这一目标?

iphone objective-c key-value-observing uiview ios

77
推荐指数
3
解决办法
6万
查看次数

当控制器被释放时,键值观察者仍然在其中注册

我在代码中添加了一个观察者,然后在dealloc和viewWillDisappear中将其删除但是我仍然收到错误说明

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'类的MyController2的实例0x167e5980被释放,而键值观察者仍然注册了它.

Current observation info: <NSKeyValueObservationInfo 0x16719f90> (
<NSKeyValueObservance 0x16719fb0: Observer: 0x167e5980, Key path: dataContainer.report, Options: <New: YES, Old: YES, Prior: NO> Context: 0x0, Property: 0x1677df30>
)'
Run Code Online (Sandbox Code Playgroud)

我创建了一个控制器,MyController并从中派生出一个新的控制器MyController2.现在我加入了KVO MyController2.

- (void)viewDidLoad {
    [super viewDidLoad];
    [self addObserver:self forKeyPath:@"dataContainer.report" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}
Run Code Online (Sandbox Code Playgroud)

然后在observeValueForKeyPath中: -

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {

    id oldC = [change objectForKey:NSKeyValueChangeOldKey];
    id newC = [change objectForKey:NSKeyValueChangeNewKey];

    if([keyPath isEqualToString:@"dataContainer.report"]) {
        if (oldC != newC) {
            //Remove Observer …
Run Code Online (Sandbox Code Playgroud)

memory objective-c key-value-observing dealloc ios

3
推荐指数
1
解决办法
6334
查看次数

标签 统计

key-value-observing ×3

objective-c ×3

ios ×2

cocoa ×1

dealloc ×1

iphone ×1

key ×1

memory ×1

uiview ×1