【发布时间】:2014-04-16 06:06:46
【问题描述】:
好吧,这真的让我很难过。挑战看起来很简单,但有一些限制真的让我大吃一惊。
节目要点:
(1) 当分钟改变时,应用程序应该以 HH:mm:ss 格式输出当前时间。
(2) 当秒数改变时,应用程序应该每秒输出一个字符,每十秒输出一个不同的字符(即“.........|.........| ”)。在这里需要注意的是,我不能只计算秒数。相反,程序必须知道当前时间秒的值,并且只有当它可以被 10 整除时才输出对应的字符。
限制:
(1) 程序可以有 2 个类 -- 一个用于分钟显示,一个用于秒显示。
(2) 每个类只能包含一个以定时器为参数的void方法。
(3) main函数会为每个类创建一个对象和2个NSTimers。 第一个计时器的时间间隔必须设置为 0.5,并且必须以分钟对象为目标。第二个计时器必须将其间隔设置为 0.1,并且必须以秒对象为目标。
我很想将第一个计时器设置为每分钟触发一次,将第二个计时器设置为每秒钟触发一次,但我不允许篡改它。这是我在被难住之前所得到的:
main.m:
MinuteDisplay *minutes = [[MinuteDisplay alloc] init];
__unused NSTimer *minutesTimer =
[NSTimer scheduledTimerWithTimeInterval:0.5
target:minutes
selector:@selector(minuteChange:)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] run];
MinuteDisplay.m:
- (void)minuteChange:(NSTimer *)timer
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDateFormatter *testFormatter = [[NSDateFormatter alloc] init];
[testFormatter setDateFormat:@"ss"];
NSDate *now = [NSDate date];
NSString *nowString = [dateFormatter stringFromDate:now];
NSString *testString = [testFormatter stringFromDate:now];
if ([testString isEqual:@"00"]) {
NSLog(@"%@", nowString];
}
}
示例输出:
01:09:00
//.5 second interval
01:09:00
我什至还没有理会这个挑战的后半部分,因为我在这里被难住了。这在技术上有效,但我知道我做错了,因为输出不依赖于知道分钟值已更改的程序。此外,由于计时器设置为每 0.5 秒触发一次,我每分钟得到两行输出,而不是只有一行(这不符合规范)。
谁能建议从这里去哪里?这个真的让我大吃一惊。
【问题讨论】:
标签: objective-c cocoa nsdate nstimer