2

毎日午後 5 時に UILocalNotification を繰り返すには? 以下は、カスタム時間を設定するための私のコードです。しかし、カスタムで毎日ユーザーに通知したい、または静的な時間になる可能性があります。iOS6を使用しています。

    -(void)scheduleNotification{

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"h:mm a"];
NSDate *dateFromString = [[NSDate alloc] init];

dateFromString = [dateFormatter dateFromString:timeStr];

UILocalNotification *localNotif = [[UILocalNotification alloc] init];

if (localNotif == nil)
    return;


localNotif.fireDate = dateFromString;

localNotif.repeatInterval = kCFCalendarUnitDay;
localNotif.timeZone = [NSTimeZone defaultTimeZone];

// Notification details
localNotif.alertBody = @"Reminder is set";
// Set the action button
localNotif.alertAction = @"Ok";

localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;

// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Local Push received while running", @"key", nil];
localNotif.userInfo = infoDict;

// Schedule the notification
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

}
4

2 に答える 2

7

これを使って。それはあなたを助けるかもしれません

NSDateFormatter *dat= [[NSDateFormatter alloc]init];
[dat setLocale:[NSLocale currentLocale]];
[dat setTimeZone:[NSTimeZone systemTimeZone]];

//[dat setDateFormat:@"YYYY-MM-dd"];// YYYY-MM-dd hh:mm a
//NSString *dateM=[dat stringFromDate:datM];
//[dat setDateFormat:@"YYYY-MM-dd h:mm a"];
NSDate *reminderDate=[NSDate date];
reminderDate =[reminderDate dateByAddingTimeInterval:1*24*60*60];

UILocalNotification  *missingDreamNotify=[[UILocalNotification alloc]init];
missingDreamNotify.fireDate=reminderDate;
missingDreamNotify.timeZone = [NSTimeZone defaultTimeZone];
missingDreamNotify.alertBody = @"Reminder is set";
missingDreamNotify.alertAction = @"Show me";
missingDreamNotify.soundName = UILocalNotificationDefaultSoundName;
missingDreamNotify.applicationIconBadgeNumber = 1;
missingDreamNotify.repeatInterval = NSDayCalendarUnit;

[[UIApplication sharedApplication] scheduleLocalNotification:missingDreamNotify];
于 2012-10-31T11:21:21.703 に答える
0

NSCalendarを利用した私のソリューションは次のとおりです。

// called in didFinishLaunchingWithOptions
/* 

 cancel all local notifications at start up and reset them
 as repeating notifications.

 processDailyNotifications
    register to system
    cancel all
    for i in notifArray:
        setDailyNotificationAtHour:minute:

 setDailyNotificationAtHour:minute:
 */

- (void)processDailyNotifications
{

    UIApplication *application = [UIApplication sharedApplication];
    // are you running on iOS8?
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil];
        [application registerUserNotificationSettings:settings];
    }
    else // iOS 7 or earlier
    {
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
        [application registerForRemoteNotificationTypes:myTypes];
    }

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    [@[@{@"hour":@0,@"minute":@58},@{@"hour":@0, @"minute":@59}] enumerateObjectsUsingBlock:^(NSDictionary *item, NSUInteger idx, BOOL *stop) {
        [self setDailyNotificationAtHour:[[item valueForKey:@"hour"] integerValue] minute:[[item valueForKey:@"minute"] integerValue]];
    }];
}

- (void)setDailyNotificationAtHour:(NSInteger)hour minute:(NSInteger)minute
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *now = [NSDate date];
    NSDate *expected = [calendar dateBySettingHour:hour minute:minute second:0 ofDate:now options:NSCalendarMatchStrictly];

    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = expected;
    notification.alertAction = @"记录";
    notification.alertBody = @"记录时间";
    notification.soundName = UILocalNotificationDefaultSoundName;
    notification.applicationIconBadgeNumber = 1;
    notification.repeatInterval = NSDayCalendarUnit;
    ALog(@"%ld, %ld, %@", (long)hour, (long)minute, [expected descriptionWithLocale:[NSLocale currentLocale]]);

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
于 2015-07-19T17:02:07.040 に答える