我已经创建实现在一个名为NumericTextFieldDelegate
然后它自己的类UITextFieldDelegate委托对象我已经初始化委托我这样的控制器:直接初始化代表产生ARC警告和EXC_BAD_ACCESS崩溃
textFieldName.delegate = [NumericTextFieldDelegate new];
和我这一警告来自编译器:
Assigning retained object to unsafe property; object will be released after assignment
这意味着,对象将在转让之后,实际上当我运行的应用程序,我关注的UITextField释放我得到一个EXC_BAD_ACCESS
一个第二应用程序崩溃...
只有这样,才能使其工作,我发现是创建与派遣NumericTextFieldDelegate
的实例的工厂方法的静态变量:
@interface NumericTextFieldDelegate : NSObject <UITextFieldDelegate>
+(NumericTextFieldDelegate *) getDelegate;
@end
@implementation NumericTextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
// This allows backspace
if ([resultingString length] == 0) {
return true;
}
NSInteger holder;
NSScanner *scan = [NSScanner scannerWithString: resultingString];
return [scan scanInteger: &holder] && [scan isAtEnd];
}
+(NumericTextFieldDelegate *) getDelegate {
static NumericTextFieldDelegate *del;
@synchronized(del) {
if(del == nil)
del = [NumericTextFieldDelegate new];
}
return del;
}
@end
,然后当我分配在这样的委托:
textFieldName.delegate = [NumericTextFieldDelegate getDelegate];
一切正常,但我的问题是:
为什么我不能简单地分配一个匿名的类的新实例? 为什么对象在分配后自动释放?
为什么我需要此解决方法?
谢谢。
这是一个UITextField,而不是自定义。 – aleroot
方法不应该以'get'作为前缀,除非它们是非常具体的类型(这不是这个类型)。 – bbum
@bbum我从Java继承了get前缀:-)感谢您的提示 – aleroot