0

私は非常に初心者であり、学習目標の一環として、このシンプルなアプリを思い付くことにしました - 過去の日付と現在の日付の間の時間を表示したい - 表示されているものは常に更新されていますつまり、秒と分などはカウントアップし続けます。

これが私がこれまでに持っているものです:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss '+0000'"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *birthDate = [dateFormat dateFromString:@"Fri, 17 Feb 1989 13:00:00 +0000"];
NSDate *todaysDate = [NSDate date];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger timeComponents = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comps = [gregorian components:timeComponents fromDate:birthDate toDate:todaysDate options:0];

NSInteger numberOfYears = [comps year];
NSInteger numberOfMonths = [comps month];
NSInteger numberOfDays = [comps day];
NSInteger numberOfHours = [comps hour];
NSInteger numberOfSeconds = [comps second];

NSString *yearsString = [NSString stringWithFormat:@"%ld", (long)numberOfYears];
_years.text = yearsString;

NSString *monthsString = [NSString stringWithFormat:@"%ld", (long)numberOfMonths];
_months.text = monthsString;

NSString *daysString = [NSString stringWithFormat:@"%ld", (long)numberOfDays];
_days.text = daysString;

NSString *hoursString = [NSString stringWithFormat:@"%ld", (long)numberOfHours];
_hours.text = hoursString;

NSString *secondsString = [NSString stringWithFormat:@"%ld", (long)numberOfSeconds];
_seconds.text = secondsString;
}

私は2つの問題を抱えています:

  1. 秒の出力が正しく表示されません - 秒は「1176」のように千単位で表示されますか? 他のすべての日付コンポーネントは正しく表示されているようです。
  2. 出力は更新されません。固定量が表示されます。これを実装する「正しい」方法が何であるかがわからないため、まだこれを設定しようとはしていません-これに関するいくつかのポインタ/指示に感謝します:)
4

1 に答える 1

1
  1. NSMinuteCalendarUnit をコンポーネント フラグに組み込みます。
  2. viewDidLoad は 1 回実行されます。このコードを継続的に実行したい場合は、ループで実行する (悪い) か、再度実行するようにタイマーを設定する (良い) 必要があります。

時間に関連するすべてのコードを、おそらく と呼ばれる新しいメソッドに移動することをお勧めします- (void)showTime。次に、次のようなタイマーを作成できます。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showTime) userInfo:nil repeats:YES];

このタイマーをクラスのインスタンス変数に格納して、後で不要になったときに無効にして nil できるようにします。

于 2013-09-28T20:30:46.410 に答える