永远不会读取存储为“有效”的值

时间:2013-01-17 10:20:55

标签: objective-c boolean dead-code

我有一个验证方法,通过它我可以分析特定变量是否通过了验证标准。

以下是代码:

-(BOOL)validateFields{
    BOOL valid = FALSE;
    if (dateEntry != TRUE && saveOrderType != TRUE) {
        if (_editRequired==YES) {
            if ([[[editedTextField text] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@""]) {
                valid = FALSE;
            } else {
                valid = TRUE;
            }
        } else {
            valid = TRUE;
        }
        if (_editRegEx) {
            NSRegularExpression *regex = [NSRegularExpression
                                      regularExpressionWithPattern:_editRegEx
                                      options:NSRegularExpressionCaseInsensitive
                                      error:nil];
            if ([regex numberOfMatchesInString:[editedTextField text] options:0 range:NSMakeRange(0, [[editedTextField text] length])]==0) {
                valid=FALSE;
            } else {
                valid = TRUE;
            }
        } else {
            valid = TRUE;
        }

    } else {
        valid = TRUE;
    }
    return valid;
}

我得到了Value stored to 'valid' is never read的3个实例,这很奇怪,因为最终,它会在方法结束时返回。

我在设置变量的前三个实例中得到它,只有这三个:

if (_editRequired==YES) {
    if (//checks if the field contains any characters) {
        valid = FALSE;
    } else {
        valid = TRUE;
    }
} else {
     valid = TRUE;
}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您的if (_editRequired==YES) {}条件被if (_editRegEx) {}条件完全覆盖,因此前者中没有使用任何分配:valid始终在第二个条件中重新分配。

答案 1 :(得分:0)

你有这个警告,因为你在if / else之后存储了另一个值。 事实上,在此之后你有另一个if(测试_editRegEx)并在所有情况下存储一个值(if和else)。所以不需要你的第一个。