1

アプリでアラームの概念を使用しているので、uilocalnotificationsとdatepickerviewを使用して時間を設定しました。私の日付ピッカーは時間のみを表示します。

私はコードを使用しました、

- (void)viewDidLoad {
datePicker.date = [NSDate date];
}

datepickerの時刻は現在の日付として設定されますが、2番目の値は0に設定されません。これは、viewdidloadedの2番目の値、つまり、たとえば12:30:14に移動します。

- (void)scheduleNotification {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Class cls = NSClassFromString(@"UILocalNotification");

if (cls != nil) {
    UILocalNotification *notif = [[cls alloc] init];
notif.fireDate = [datePicker date];
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = @"My Alarm";
notif.alertAction = @"Show";
notif.soundName = @"Show.mp3";
notif.applicationIconBadgeNumber = 1;

NSDictionary *userDict = [NSDictionary dictionaryWithObject:reminderText.text
forKey:kRemindMeNotificationDataKey];

notif.userInfo = userDict;

[[UIApplication sharedApplication] scheduleLocalNotification:notif];

[notif release];

}

アラームはwrtdatepickerを再生するように設定されています

コードを使用して、datepickerの2番目を0に設定しようとしました

 - (void)viewDidLoad {

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

NSDate *reqdate = [self.datePicker date];

NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit |   NSMonthCalendarUnit |  NSDayCalendarUnit )

   fromDate:reqdate];

NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )

   fromDate:reqdate];


   NSDateComponents *dateComps = [[NSDateComponents alloc] init];


[dateComps setHour:[timeComponents hour]];

[dateComps setMinute:[timeComponents minute]];

[dateComps setSecond:[timeComponents 0]];

NSDate *itemDate = [calendar dateFromComponents:dateComps];

datePicker.date = itemDate;

}

しかし、突然アラームを設定すると、通知機能がアラームを鳴らします。ここで何が起こっているのかわかりませんでした。

4

2 に答える 2

1

将来の自分を設定する必要がありnotif.fireDateます。たとえば、これを試してください

    // Get the current date
    NSDate *now = [NSDate date];
    //make it later
    NSDate *pickerDate =   [now dateByAddingTimeInterval: (60.0 * 5)]; // 5 minutes in the future
    // Break the date up into components
    NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                                   fromDate:pickerDate];
    NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                                   fromDate:pickerDate];

    // Set up the fire time - or manipulate it here to whatever time/date in the future you may like!
    NSDateComponents *dateComps = [[NSDateComponents alloc] init];
    [dateComps setDay:[dateComponents day]];
    [dateComps setMonth:[dateComponents month]];
    [dateComps setYear:[dateComponents year]];
    [dateComps setHour:[timeComponents hour]];
    [dateComps setMinute: [timeComponents minute];
    [dateComps setSecond:0];
    NSDate *itemDate = [calendar dateFromComponents:dateComps];


    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    if (localNotif == nil)
        return;
    localNotif.fireDate = itemDate;
    localNotif.timeZone = [NSTimeZone defaultTimeZone];

それはうまくいきます...

于 2012-08-06T07:23:55.940 に答える
1

variable を使用していませんdateComponentsitemDateでちょうどを 設定しているtimeComponentsので、日付はおそらく 0001 年 1 月 1 日になります。

通知の期日がすぐになる可能性があります (fireDateは過ぎています)。

于 2012-08-06T07:23:58.467 に答える