1

このコードを作成して、スリープ時間中に通知を一時停止しましたが、よくわからないことがありました。どうなり得るか?

私の.mコード:

- (IBAction)save:(id)sender {

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.timeZone=[NSTimeZone defaultTimeZone];
dateFormatter.timeStyle=NSDateFormatterShortStyle;
dateFormatter.dateStyle=NSDateFormatterShortStyle;
NSString *dateTimeString=[dateFormatter stringFromDate:_startTime.date];
NSLog(@"Start time is %@",dateTimeString);


NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init];
dateFormatter2.timeZone=[NSTimeZone defaultTimeZone];
dateFormatter2.timeStyle=NSDateFormatterShortStyle;
dateFormatter2.dateStyle=NSDateFormatterShortStyle;
NSString *dateTimeString2=[dateFormatter2 stringFromDate:_endTime.date];
NSLog(@"End time is %@",dateTimeString2);



if ([[NSDate date] isEqualToDate:_startTime.date]) {
    NSLog(@"currentDate is equal to startTime");

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    NSLog(@"Sleep time silent started and notification cancelled");

}

if ([[NSDate date] isEqualToDate:_endTime.date]) {
    NSLog(@"currentDate is equal to endTime");

    [self pickerSelectedRow];

    NSLog(@"Time to wake up and notification rescheduled");
}


}

ボタンをクリックするsaveと、この出力が表示されます。これは、正常に動作していることを意味しますが、通知がキャンセルまたは再スケジュールされたことを示す出力が得られないため、動作していません!!!

出力:

2013-05-03 03:04:57.481 xxx[10846:c07] Start time is 5/3/13, 3:06 AM
2013-05-03 03:04:57.482 xxx[10846:c07] End time is 5/3/13, 3:07 AM

私は何が欠けていますか?

また、これはバックグラウンドで機能しますか?

4

1 に答える 1

1

別の比較が必要です。おそらく次のようなものです: (以下のすべてが .m ファイルにあるはずです)

- (IBAction)save:(id)sender {

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    dateFormatter.timeZone=[NSTimeZone defaultTimeZone];
    dateFormatter.timeStyle=NSDateFormatterShortStyle;
    dateFormatter.dateStyle=NSDateFormatterShortStyle;
    NSString *dateTimeString=[dateFormatter stringFromDate:_startTime];
    NSLog(@"Start time is %@",dateTimeString);

    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc]init];
    dateFormatter2.timeZone=[NSTimeZone defaultTimeZone];
    dateFormatter2.timeStyle=NSDateFormatterShortStyle;
    dateFormatter2.dateStyle=NSDateFormatterShortStyle;
    NSString *dateTimeString2=[dateFormatter2 stringFromDate:_endTime];
    NSLog(@"End time is %@",dateTimeString2);

    if ([self date:[NSDate date] compareMe:_startTime]) {
        NSLog(@"currentDate is equal to startTime");

        [[UIApplication sharedApplication] cancelAllLocalNotifications];

        NSLog(@"Sleep time silent started and notification cancelled");

    }

    if ([self date:[NSDate date] compareMe:_endTime]) {
        NSLog(@"currentDate is equal to endTime");

        [self pickerSelectedRow];

        NSLog(@"Time to wake up and notification rescheduled");
    }
}

-(BOOL)date:(NSDate *)date1 compareMe:(NSDate *)date2 {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *date1Componenets = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date1];
    NSDateComponents *date2Componenets = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date2];

    return [date1Componenets year] == [date2Componenets year];
}

日付を何度も比較する場合は、比較関数を NSDate カテゴリなどの別のファイルに入れることができますが、それは必要以上に複雑です。

于 2013-05-03T01:29:52.917 に答える