0

在表单上,​​我使用-[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

在你的第一个代码示例中使用'[self formErrors]'意味着它被声明为一个属性,或者你已经设置了一个方法来公开它。否则,你只是将它作为'formErrors'访问。你可以解释吗? –

+0

复制并粘贴旧代码。刚纠正它。 – LondonGuy

+0

很多人会告诉你只有一个正确的方式(他们的方式!),但它真的很“糊”。我倾向于使用指针变量的属性,以便所有retain/strong/dealloc鲤鱼可以保持一种集中式,但对于ARC来说这是不太必要的。 –

回答

1

如果我是你,我会坚持更简单的&更直接的纯粹ivars - 就像你在这里做的一样 - 直到你有足够的经验来形成你自己的意见。

更一般地说,我认为这是优先考虑的。有些人喜欢通过属性声明来制作所有的ivars。其他人更喜欢纯粹的伊娃宣言的重量轻。在某些情况下(KVO),财产申报将赢得胜利。

这仅适用于硬皮旧的非ARC,但如果你发现自己做这一次或多次:

[myObject release] 
myObject = [newObject retain]; 

你可能会与属性的语法,例如更好

self.myObject = newObject;