在UIView上创建KVO时出错

时间:2013-04-29 10:14:51

标签: objective-c ipad uiview uiviewcontroller key-value-observing

我正在向我的视图控制器添加一个名为bookViewContainer的UIView,我希望使用KVO检测其比例何时发生变化。这是我的viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    bookViewContainer = [[UIView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:bookViewContainer];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
    [bookViewContainer addGestureRecognizer:tap];

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRecognized:)];
    [bookViewContainer addGestureRecognizer:pinch];

    [bookViewContainer addObserver:self forKeyPath:@"transform.scale" options:NSKeyValueObservingOptionNew context:NULL];
}

和我的observeValueForKeyPath

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", object);
}

然而,当我运行项目时,我立即得到错误:

  

类NSConcreteValue的实例0x1d844ca0已取消分配,而键值观察者仍在其中注册。观察信息被泄露,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置断点以在调试器中停止。这是目前的观察信息:    (    上下文:0x0,属性:0x1d844db0>   )

我之前使用过KVO(但从未在transform.scale上使用过),并且视图肯定没有被释放(我正在使用ARC)。我尝试过使用scale,但后来没有任何反应。我做错了什么?

1 个答案:

答案 0 :(得分:0)

解决方案:我需要自己使用transform,而不是它的属性。完成工作!