【问题标题】:Error: NSCFData resignFirstResponder - unrecognized selector sent to instance. But why?错误:NSCFData resignFirstResponder - 无法识别的选择器发送到实例。但为什么?
【发布时间】:2011-07-06 18:35:30
【问题描述】:

我得到 NSCFData resignFirstResponder - 无法识别的选择器发送到实例。但为什么呢?

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

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

我的调用栈

0 核心基础 0x35f08c7b __exceptionPreprocess + 114 1874 1 libobjc.A.dylib 0x30186ee8 objc_exception_throw + 40 1875 2 核心基础 0x35f0a3e3 -[NSObject(NSObject)不识别选择器:] + 98 1876 3 CoreFoundation 0x35eaf467 ___转发___ + 506 1877 4 核心基础 0x35eaf220 _CF_forwarding_prep_0 + 48 1878 5 MegaDish 0x000187eb-[MapViewController viewWillDisappear:] + 34 1879 6 UIKit 0x3389d438-[UINavigationController viewWillDisappear:] + 112

【问题讨论】:

    标签: iphone memory-management memory-leaks


    【解决方案1】:

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

    【讨论】:

    • 首先系统调用 viewWillDisappear,然后才调用 viewDidUnload。我说的对吗?
    • 是的,但它本可以调用-viewWillDisappear:-viewDidUnload-viewDidLoad-viewWillAppear:,最后再次调用-viewWillDisappear:。关键是你没有正确管理你的内存,你最终得到了一个错误的指针。
    【解决方案2】:

    大概你需要保留Field。

    【讨论】:

      【解决方案3】:

      @Jonathan 的答案的替代方法是在您拥有它时保留您的文本字段,并在您完成时释放它。

      还有一点需要注意:objective-c 中的变量习惯上以小写字母开头。类名以大写字母开头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        相关资源
        最近更新 更多