2

我正在使用一个UIView. 该应用程序正在使用 ARC。UIView用于多个视图控制器。在UIView一个监听UIKeyboardDidHideNotification器中添加了。侦听器可以与某些视图控制器一起正常工作,而与其他视图控制器一起使用会使应用程序崩溃。特别是当我在第一次使用后在第二个视图控制器中使用时。错误是

* -[appname keyboardWillHide]:消息发送到释放的实例 0xb9c2760

在某些情况下,侦听器会被调用两次。

我在 uiview drawrect 方法中添加的代码是:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];

侦听器的代码是

-(void)keyboardWillHide
{
    if(boolisViewlifted)
    {

            CGRect newFrame=self.frame;
            newFrame=CGRectMake(self.frame.origin.x, self.frame.origin.y+250, self.frame.size.width, self.frame.size.height);
            self.frame=newFrame;
            boolisViewlifted=false;

    }
}

uiview 出现在调用视图控制器的顶部。请让我知道导致此错误的原因以及解决方法。

4

1 回答 1

1

由于内存警告,您的视图正在卸载。您需要在为通知添加观察者的所有视图中覆盖 dealloc 方法并删除所有通知的观察者。

//do add in all views
-(void)dealloc
{
     //[super dealloc];//As you are using ARC don't call super's dealloc
     [[NSNotificationCenter defaultCenter] removeObserver:self];
} 
于 2012-12-08T13:34:19.277 回答