如果没有调用语句

时间:2015-07-22 05:36:03

标签: ios objective-c

我只是尝试使用下面的代码在星期五下午4点到6点更改UILabel上的文本,但if语句没有被调用?我通过Interface Builder使用UILabel的子类。

- (void)viewDidLoad {
    [super viewDidLoad];
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self     selector:@selector(targetMethod) userInfo:nil repeats:YES];
}

-(void)targetMethod {
    NSLog(@"Called Timer");

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"EEE hh mm"];
    NSDate *dt = [NSDate date];
    NSString *dayAsString = [formatter stringFromDate:dt];
    NSArray *array = [dayAsString componentsSeparatedByString: @""];
    if([[array objectAtIndex:0] isEqualToString:@"Friday"] && [[array     objectAtIndex:1] intValue]>=4 &&  [[array objectAtIndex:1] intValue]<=6 &&   [[array objectAtIndex:2] intValue]>=0 && [[array objectAtIndex:2] intValue]  <=59)
    {
        self.scrollingLabel.text = @"On Air";
        NSLog(@"On Air");
    }
    else 
    {
        self.scrollingLabel.text = @"Off Air";
        NSLog(@"Off Air");
    }
}

对此的任何帮助都将非常感激。

4 个答案:

答案 0 :(得分:3)

你想用空格分割时间吗?

NSArray *array = [dayAsString componentsSeparatedByString:@" "];

"EEE"将返回"Fri",而非"Friday"

此外,如果您需要操纵日期/时间,您可以查看此库:DateTools

#import "DateTools.h"

NSDate *date = [NSDate date];
if (date.weekday == 6 && date.hour >= 16 && date.hour <= 18) {
    NSLog(@"On Air");
}else{
    NSLog(@"Off Air");
}

答案 1 :(得分:2)

你犯了2个错误

    此处[formatter setDateFormat:@"EEE hh mm"];中的
  1. "EEE"将仅显示3个字符,例如&#34; Fri&#34;。
  2. NSArray *array = [dayAsString componentsSeparatedByString: @""];将只返回数组中的一个对象。
  3. 现在你需要做

    1. 要么改变&#34;星期五&#34;到&#34;周五&#34;如果条件或使用"EEEE"(4E)将返回全名,如&#34;星期五&#34;。
    2. NSArray *array = [dayAsString componentsSeparatedByString: @" "];
    3. 中以单个空格分隔

答案 2 :(得分:1)

setDateFormat:@“EEE hh mm”

日期格式为3个E,它返回工作日的短版本,如“Fri”。

我认为你需要将比较从“星期五”改为“星期五”

答案 3 :(得分:0)

从技术上讲,您的组件根本没有被分成单独的元素。在&#39; componentsSeparatedByString&#39;之后,您忘记了引号中的空格。方法。它应该是:

NSArray *array = [dayAsString componentsSeparatedByString: @" "]; 

我测试了它,并且应该调用if语句并返回指定的输出。 此外,第一个元素只返回当天的前三个字符,例如&#39; Tue&#39;星期二。周五改为周五&#39;周五你应该好。