内部类,实例变量或属性?

时间:2014-02-20 16:50:52

标签: objective-c cocoa-touch ios7 uitextfield uitextfielddelegate

在表单上,​​我使用-[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:中执行我需要做的事情。

我注意到在处理这些类型的场景时我会感到有些困惑。

1 个答案:

答案 0 :(得分:1)

如果我是你,我会坚持使用更简单的方法。更直接的纯粹伊娃 - 就像你在这里做的那样 - 直到你有足够的经验来形成自己的观点。

更一般地说,我认为这取决于偏好。有些人喜欢通过财产声明制作所有的ivars。其他人更喜欢纯ivar声明的轻量级。在某些情况下(KVO),财产声明将获胜。

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

[myObject release]
myObject = [newObject retain];

使用属性语法可能会更好,例如

self.myObject = newObject;