Iphone 每天下午5点重复UILocalNotification

Iphone 每天下午5点重复UILocalNotification,iphone,objective-c,ios,cocoa-touch,uilocalnotification,Iphone,Objective C,Ios,Cocoa Touch,Uilocalnotification,如何在每天下午5点重复UILocalNotification?下面是我设置自定义时间的代码。但是我想每天在自定义时间或静态时间通知用户。我使用的是iOS 6 -(void)scheduleNotification{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"h:mm a"]; NSDate *dateFromString = [[NS

如何在每天下午5点重复UILocalNotification?下面是我设置自定义时间的代码。但是我想每天在自定义时间或静态时间通知用户。我使用的是iOS 6

    -(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];

}

用这个。这可能对你有帮助

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];

以下是我的解决方案,利用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];
}

那么您需要什么
localNotif.repeatInterval=kCFCalendarUnitDay不行?它只显示徽章。未显示警报视图。请遵循此链接。更好的做法是使用NSDateComponents来抵消日期,因为并非所有日期的长度都相同。您如何确保这将在下午5点触发(根据用户设备时间)?