2011-07-06 4 views
0

NSCFDataを取得するresignFirstResponder - 認識できないセレクタがインスタンスに送信されました。しかし、なぜ?あなたのテキストフィールドは、おそらく-viewDidUnloadで、リリースされましたエラー:NSCFData resignFirstResponder - インスタンスに送信された認識できないセレクタ。しかし、なぜ?

@interface { UITextField *Field; } @end 
@implementation 
-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField { 
    Field = textField; 
    return YES; 
} 

-(void) viewWillDisappear:(BOOL)animated 
{ 
    [Field resignFirstResponder]; 
} 
@end 

私のコールスタック

 
0 CoreFoundation      0x35f08c7b __exceptionPreprocess + 114 
1874   1 libobjc.A.dylib      0x30186ee8 objc_exception_throw + 40 
1875   2 CoreFoundation      0x35f0a3e3 -[NSObject(NSObject) doesNotRecognizeSelector:] + 98 
1876   3 CoreFoundation      0x35eaf467 ___forwarding___ + 506 
1877   4 CoreFoundation      0x35eaf220 _CF_forwarding_prep_0 + 48 
1878   5 MegaDish       0x000187eb -[MapViewController viewWillDisappear:] + 34 
1879   6 UIKit        0x3389d438 -[UINavigationController viewWillDisappear:] + 112 

答えて

2

。次に、NSDataオブジェクトがメモリ内の同じ場所に割り当てられました。 -textFieldDidEndEditing:を実装し、Fieldのイールをnilにクリアすると、問題が解決するはずです。

+0

システムコールは、最初にviewWillDisappearをコールし、次にviewDidUnloadを呼び出します。私は正しい? – Voloda2

+0

はい、 '-viewWillDisappear:'、 '-viewDidUnload'、' -viewDidLoad'、 '-viewWillAppear:'、最後に '-viewWillDisappear:'を再度呼び出すことができました。ポイントは、あなたのメモリを正しく管理しておらず、悪いポインタで終わることです。 –

1

おそらくフィールドを保持する必要があります。

1

@ Jonathanの答えは、所有権を取ったときにテキストフィールドを保持し、終了したら解放することです。

注:objective-cの変数は小文字で始まるのが通例です。クラス名は大文字で始まります。

関連する問題