错误:NSCFData resignFirstResponder - 发送到实例的无法识别的选择器。但为什么?

时间:2011-07-06 18:35:31

标签: iphone memory-management memory-leaks

我得到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

3 个答案:

答案 0 :(得分:2)

您的文字字段已发布,可能在-viewDidUnload。然后在内存中的同一位置分配了NSData个对象。实施-textFieldDidEndEditing:并将Field ivar清除为nil,问题应该得到解决。

答案 1 :(得分:1)

大概你需要保留Field。

答案 2 :(得分:1)

@ Jonathan回答的替代方法是在取得所有权后保留文本字段,并在完成后将其释放。

另请注意:objective-c中的变量通常以小写字母开头。类名以大写字母开头。