我试图检查用户输入的两个输入文本字段,以查看它们是放入AM还是PM(针对非区分大小写)。如果他们这样做,发布事件否则会显示警告。
我试过这个,它在某些情况下有效,但是当我输入PM和AM时,它有时会告诉我它无效并返回我的警报。我知道哪里有逻辑错误?
if(!([self.eventStartTimeSuffix.text isEqualToString:@"AM"] || [self.eventStartTimeSuffix.text isEqualToString:@"PM"]) && !([self.eventEndTimeSuffix.text isEqualToString:@"AM"] || [self.eventEndTimeSuffix.text isEqualToString:@"PM"]))
{
NSLog(@"Invalid Event / Start Time Suffix, AM or PM required");
}
else
{
//post event
}
答案 0 :(得分:1)
在尝试测试不 AM / PM时,您正在测试两个无效,您的测试是:NOT(StartTimeSuffix是AM / PM)和NOT(EndTimeSuffix是AM / PM)。因此,首先要么使用OR来连接单独的条件,要么单独测试它们,这样你就可以提出更具体的错误。
你也不会像你说的那样忽视案例,如果用户输入一些空格,也可能值得忽略它。您可以使用以下代码执行这两项操作:
NSSString *startSuffix = [[self.eventStartTimeSuffix.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] lowercaseString];
然后将startSuffix
与@"am"
和@"pm"
进行比较,同样对eventEndTimeSuffix
进行比较。
顺便说一句如果你使用OS X的国际设施并比较AM& amp;的本地化版本,你可能会更好。 PM - 但那是另一个话题!
答案 1 :(得分:0)
添加括号以使分组清晰:
伪代码(这不是真正的代码!):
if (
(startText == "AM" || startText == "PM")
&&
(endText == "AM" || endText "PM")
)
{
//Both fields contain either "AM" or PM"
}
请注意,如果您需要不区分大小写的比较,则应使用
if ([string caseInsensitiveCompare: @"otherString"] == NSOrderedSame)
{
//strings match, ignoring case
}
else
{
//strings don't match
}
答案 2 :(得分:0)
您也可以考虑一种方法,使其更具可读性:
- (BOOL)hasValidTimeSuffix:(NSString *)timeText {
return [[timeText lowercaseString] hasSuffix:@"am"] || [[timeText lowercaseString] hasSuffix:@"pm"]
}
然后
if ([self hasValidTimeSuffix:self.eventStartTimeSuffix.text] && [self hasValidTimeSuffix:self.eventEndTimeSuffix.text])
{
//post event
}
else
{
NSLog(@"Invalid Event / Start Time Suffix, AM or PM required");
}
请注意使用NSString的lowercaseString
和hasSuffix:
方法。这些帮助很大。
答案 3 :(得分:0)
为什么要费心检查文本字段的输入?使用NSPopUpButton不是更明智吗?检查所选标签0:AM或1:PM。这只是一个想法,但它为NSPopUpButton而尖叫。干杯!
if
([sender selectedTag] == AM)
{
NSLog(@"it's AM");
}
else if([sender selectedTag] == PM)
{
NSLog(@"it's PM");
}
//Sender is one of the two NSPopUpButtons
//I made a Typedef Enum to make it more readable
/*In the .h file:
typedef enum {
AM,
PM
} TimeNotation;
*/