在表单上,我使用-[UITextFieldDelegate textFieldDidEndEditing]:
注册任何错误并将其存储在NSMutableArray
实例变量formErrors
中。
我按下提交按钮时会使用formErrors
,或者在表单上有错误时禁用按钮。
将错误消息放在formErrors
上,如下所示:
-(void)textFieldDidEndEditing:(UITextField *)textField
{
if ( textField == [self nameField] ) {
if ( ([[textField text] length] < 2) || ([[textField text] length] > 20) ) {
[[formErrors addObject:@"Name must contain a minimum of 2 and a maximum of 20 characters only."];
} else {
if ([[textField text] rangeOfCharacterFromSet:alphaSet].location != NSNotFound) {
[[formErrors addObject:@"Name must contain letters and spaces only."];
}
}
}
}
我试图找出存储formErrors对象的最佳方法,以便在检查完所有字段后访问它们。
对我有用的是声明一个实例var:
{
NSMutableArray *formErrors;
}
然后在viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
formErrors = [[NSMutableArray alloc] init];
然后在prepareForSegue:
我有一些临时代码来检查事情是否有效:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
int errCount = [formErrors count];
// check if all textfield values are filled in if not then disallow form submit
for (NSString *error in formErrors) {
NSLog(@"Total %d errors, \n Error Message: %@", errCount, error);
}
由于某种原因,这感觉不对。我应该申报房产吗?我想要做的就是,当我进入和离开字段时,检查是否有任何错误;如果有,只需将错误消息存储在formErrors
中,这样我就可以在prepareForSegue:
中执行我需要做的事情。
我注意到在处理这些类型的场景时我会感到有些困惑。
答案 0 :(得分:1)
如果我是你,我会坚持使用更简单的方法。更直接的纯粹伊娃 - 就像你在这里做的那样 - 直到你有足够的经验来形成自己的观点。
更一般地说,我认为这取决于偏好。有些人喜欢通过财产声明制作所有的ivars。其他人更喜欢纯ivar声明的轻量级。在某些情况下(KVO),财产声明将获胜。
这仅适用于硬壳旧的非ARC,但如果您发现自己这样做了一次或多次:
[myObject release]
myObject = [newObject retain];
使用属性语法可能会更好,例如
self.myObject = newObject;