我只是尝试使用下面的代码在星期五下午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");
}
}
对此的任何帮助都将非常感激。
答案 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"];
中的"EEE"
将仅显示3个字符,例如&#34; Fri&#34;。NSArray *array = [dayAsString componentsSeparatedByString: @""];
将只返回数组中的一个对象。现在你需要做
"EEEE"
(4E)将返回全名,如&#34;星期五&#34;。NSArray *array = [dayAsString componentsSeparatedByString: @" "];
答案 2 :(得分:1)
setDateFormat:@“EEE hh mm”
日期格式为3个E,它返回工作日的短版本,如“Fri”。
我认为你需要将比较从“星期五”改为“星期五”
答案 3 :(得分:0)
从技术上讲,您的组件根本没有被分成单独的元素。在&#39; componentsSeparatedByString&#39;之后,您忘记了引号中的空格。方法。它应该是:
NSArray *array = [dayAsString componentsSeparatedByString: @" "];
我测试了它,并且应该调用if语句并返回指定的输出。 此外,第一个元素只返回当天的前三个字符,例如&#39; Tue&#39;星期二。周五改为周五&#39;周五你应该好。