1

ラベルと 2 つの矢印ボタンがあります。左矢印を押すと、現時点でその日付より 1 日少ない日付を表示したいと考えています。右矢印を押すと、1 日が追加されます。

現時点では、これが私のコードです。

- (IBAction)addDay:(id)sender {
    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = 1;
    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    NSString *dateNow = _lblDate.text;

    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EE. d MMMM YYYY"];
    NSDate *date = [dateFormat dateFromString:dateNow];

    date = [theCalendar dateByAddingComponents:dayComponent toDate:date options:0];
    NSString *dateString = [dateFormat stringFromDate:date];
    _lblDate.text = dateString;

}

- (IBAction)deleteDay:(id)sender {

    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = 1;
    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    NSString *dateNow = _lblDate.text;

    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EE. d MMMM YYYY"];
    NSDate *date = [dateFormat dateFromString:dateNow];

    date = [theCalendar dateByAddingComponents:dayComponent toDate:date options:0];
    NSString *dateString = [dateFormat stringFromDate:date];
    _lblDate.text = dateString;

}

しかし、何らかの理由で日付が間違っています。日付を追加および削除するときのパターンはありません。

誰でも私を助けることができますか?

敬具

4

4 に答える 4

0

1日を追加するには、次のように1日のTimeIntervalを追加する必要があります

NSDate *newDate1 = [date addTimeInterval:60*60*24];

1日を引くには、次のようにします

NSDate *newDate2 = [date addTimeInterval:-60*60*24];
于 2012-11-29T17:47:21.223 に答える
0

これには2つの問題があります。

  1. 実際には1日を1つずつ減らしていません(追加のように見えますか?)
  2. メインスレッドのUIを更新していません。

次の変更を試してください。

- (IBAction)deleteDay:(id)sender {

    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = -1;
    /* snip */
}

と...

[_lblDate performSelectorOnMainThread:@selector(setText:) withObject:dateString waitUntilDone:NO];

于 2012-11-29T16:56:44.390 に答える
0

これが主な問題かどうかはわかりませんが、- (IBAction)deleteDay:(id)senderでは.dayComponent.day = 1;dayComponent.day = -1;

于 2012-11-29T16:42:07.627 に答える
0

追加のコードは正しいです。ただし、文字列から日付への変換に依存すると、問題が生じます。NSDateオブジェクトをインスタンス変数として取得し、次の日または前日にこのインスタンス変数を更新することをお勧めします。値を更新した後、dateformatter を使用してこの日付から文字列を取得できます。現在、ラベルのテキストを使用して日付を生成すると、問題が発生します。それがあなたがそれを行うことができる方法です

// currentDate is my instance variable.
currentDate = [[NSDate date] retain];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
dateLabel.text = [dateFormat stringFromDate:currentDate];

そして、それがあなたの翌日の関数がどのように見えるかです

   (IBAction)nextDay:(id)sender {

       NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
       dayComponent.day = 1;
       NSCalendar *theCalendar = [NSCalendar currentCalendar];

       NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
       [dateFormat setDateFormat:@"EE. d MMMM YYYY"];

       currentDate = [[theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0] retain];
       NSString *dateString = [dateFormat stringFromDate:currentDate];
       dateLabel.text = dateString;
    }

そして前日はこちら

enter code here

    (IBAction)previousDay:(id)sender {

        NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
        dayComponent.day = -1;
        NSCalendar *theCalendar = [NSCalendar currentCalendar];

        NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
        [dateFormat setDateFormat:@"EE. d MMMM YYYY"];

        currentDate = [[theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0] retain];
        NSString *dateString = [dateFormat stringFromDate:currentDate];
        dateLabel.text = dateString;
    }
于 2012-11-29T17:33:40.290 に答える