0
下面是在我的班级关注的领域:的UITextField可能被过早地释放,我想不通的地方,为什么
.h
@interface TimerViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UITextField *hourField,*minuteField;
}
@property (strong, nonatomic) IBOutlet UITextField *hourField,*minuteField;
@end
.m
@implementation TimerViewController
@synthesize hourField,minuteField;
@end
我的问题是我可以在应用程序崩溃之前多次使用文本字段(检索和设置属性):
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[__NSCFString setText:]: unrecognized selector sent to instance 0x1e1dafa0'
当代码[self.hourField setText:@"5"];
运行时会发生这种情况。当检查[self.hourField isFirstResponder]
是否具有相同类型的日志时也会发生。
控制台看到文本字段为__NSCFString
,这导致我认为它可能已被释放?
用ARC运行,我总是使用合成访问器。以前从未遇到过这个问题,也无法看到我要出错的地方。
我删除了iVar声明并保留了@property声明和合成器。由于我可以多次使用文本字段,因此它肯定与插座连接。尽管如此,仍然有同样的问题。还有什么想法? – sooper
我想我同意你的说法,它的ARC将它清理干净。也许你可以尝试关闭该文件的ARC,看看是否改变了任何东西。您可以通过在目标 - >构建阶段 - >编译源文件下面添加“-fno-objc-arc”作为标志来执行此操作。这在黑暗中是一种镜头,但它可能会起作用。还要将属性更改为(保留,非原子) – rooster117
您是否还删除了@synthesize?这是暗示现在 – rooster117