如果逻辑背后检查两个文本字段

时间:2014-05-27 20:04:29

标签: ios objective-c if-statement

我试图检查用户输入的两个输入文本字段,以查看它们是放入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
}

4 个答案:

答案 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的lowercaseStringhasSuffix:方法。这些帮助很大。

答案 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;
 */