当我构建并安装我的应用程序时,我会收到以下内存警告
“'>'的左操作数是一个垃圾值“在这一行isTrue =(newLength> 20)?不:是的;
这里有什么问题。谢谢你的帮助
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength;
BOOL isTrue;
if(textField == txtFirstName){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 20) ? NO : YES;
}
if(textField == txtLastName){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 20) ? NO : YES;
}
if(textField == txtEmail){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 100) ? NO : YES;
}
if(textField == txtCompanyName){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 30) ? NO : YES;
}
if(textField == txtPassword){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 30) ? NO : YES;
}
if(textField == txtRe_EnterPassword){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 30) ? NO : YES;
}
if(textField == txtZipCode){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 20) ? NO : YES;
}
if(textField == txtCountry){
newLength = [textField.text length] + [string length] - range.length;
//isTrue = (newLength > 30) ? NO : YES;
}
isTrue = (newLength > 20) ? NO : YES;
return isTrue;
}
答案 0 :(得分:16)
当所有if条件都失败时,即出现问题。如果textField
不是您期望的那个集合之一。
在这种情况下,newLength
永远不会被分配给,并且将是随机垃圾值。
虽然这可能“永远不会发生”,但静态分析仪并不知道这一点。
您应该初始化newLength
以获得默认值,可能为零。
答案 1 :(得分:1)
分析仪无法确认您的“类似开关的构造”没有“通过”。如果所有 if 案例都失败,则newLength
的值可能永远不会被设置。然后在那个事件中,它将作为垃圾值。
答案 2 :(得分:1)
我已经对您的代码进行了一些更改,我认为现在它会更好用。
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = 0;
BOOL isTrue = false;
if(textField == txtFirstName){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 20) ? NO : YES;
}
else if(textField == txtLastName){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 20) ? NO : YES;
}
else if(textField == txtEmail){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 100) ? NO : YES;
}
else if(textField == txtCompanyName){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 30) ? NO : YES;
}
else if(textField == txtPassword){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 30) ? NO : YES;
}
else if(textField == txtRe_EnterPassword){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 30) ? NO : YES;
}
else if(textField == txtZipCode){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 20) ? NO : YES;
}
else if(textField == txtCountry){
newLength = [textField.text length] + [string length] - range.length;
isTrue = (newLength > 30) ? NO : YES;
}
else {
isTrue = (newLength > 20) ? NO : YES;
}
return isTrue;
}
答案 3 :(得分:0)
您的代码可能是正确的,如果(至少)您的一个if测试始终保证通过。但分析仪无法确定。如果你可以说服自己,你可以忽略警告。
但更好的想法是将这些更改为其他ifs,然后放入最后一个,其中是NSAssert。
答案 4 :(得分:0)
尝试 [比较:b]如果< b,则返回-1。 b,如果a == b,则为0;如果是>,则为1;湾
isTrue =([newLength compare:20] == 1)?不:是的;