2

を使用していUIViewます。アプリケーションはARCを使用しています。UIView複数のViewControllerで使用されます。UIViewリスナーにがUIKeyboardDidHideNotification追加されます。リスナーは一部のViewControllerで正常に動作し、他のViewControllerではアプリケーションをクラッシュさせます。特に、最初のビューで使用した後、2番目のビューのコントローラーで使用する場合。エラーは

* -[appnamekeyboardWillHide]:割り当て解除されたインスタンス0xb9c2760に送信されたメッセージ

一部のシナリオでは、リスナーが2回呼び出されます。

uiviewdrawrectメソッドに追加したコードは次のとおりです。

[[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は、呼び出し元のViewControllerの上に表示されます。このエラーの原因と解決方法を教えてください。

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 に答える