Повтаряне на локално известие на всеки 14 дни (две седмици)?

В моето приложение трябва да задам повтарящ се UILocalNotification. Мога да задам repeatInterval като ежедневно, седмично и т.н

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.repeatInterval = NSDayCalendarUnit; // or any other calendarUnit

Добре..добре е, но трябва да задам repeatInterval на всеки 14 дни. разбрах от тази връзка, че можем да използваме само един от интервалите на повторение на NSCalendarUnit. Така че можете да имате интервал на повторение от една минута, един час или един ден, но не и пет минути, три часа или 14 дни. Някаква идея за това ограничение в iOS 5 или по-нова (тази статия е написана за iOS 4.0)?


person Bharat    schedule 02.08.2013    source източник
comment
Някои как е възможно да се използва repeatInterval, различен от NSCalendarUnit?   -  person Bharat    schedule 02.08.2013
comment
Защо не разрешите това, като използвате календар с 14-дневна седмица? Изглежда, че това трябва да работи. След това двуседмичният (7-дневна седмица) се превръща в обикновен седмичен (14-дневен) повтарящ се цикъл.   -  person Victor Engel    schedule 14.04.2015


Отговори (3)


Можете да зададете интервала на повторение само на календарна единица. За да получите правилния интервал от време, може да се наложи да зададете няколко известия.

Ако например искате известие на всеки 20 минути, ще трябва да създадете 3 известия с интервал от 20 минути с интервал на повторение от NSHourCalendarUnit.

Проблемът във вашия случай е, че следващото нещо от седмичната единица е месец, но месецът не е точно 4 седмици.

За да зададете действително известие за всеки 14 дни, ще трябва да създадете 26 известия с повтарящ се интервал от NSYearCalendarUnit.

person user2123173    schedule 02.08.2013
comment
благодаря за помощта ви, но още едно ограничение на локалното известяване е, че можем да използваме максимум 64 известия само и трябва да задам повтарящи се типове ежедневно, седмично, 14 дни, месечно и т.н. и тук е възможно броят на известията да кръстосана граница от 64? - person Bharat; 02.08.2013
comment
Максимумът е съображение, но имате типове календари за ежедневни, седмични и месечни, така че те ще се нуждаят само от едно известие всеки. Ако използвате седмично, имате ли нужда и от 14-дневно известие? - person user2123173; 02.08.2013
comment
да, инфектирам, имам нужда от ежедневно, седмично (2 пъти седмично), седмично, 14-дневно и месечно повторение. - person Bharat; 02.08.2013
comment
Добре.. мисля, че това е единственият начин да се постигне това, благодаря за помощта - person Bharat; 02.08.2013
comment
Може да искате да помислите само за планиране може би месец предварително и след това, когато приложението се зареди, проверете дали трябва да планирате друг месец предварително. Ако даден потребител не е отварял приложението от един месец, вероятно вече не се интересува... - person user2123173; 02.08.2013
comment
@Bharat, имаш ли връзка към документацията, където се споменава ограничение на известията, моля? - person James Webster; 30.08.2013
comment
Търсене за задействане на 64 известия в developer.apple. com/library/ios/documentation/iPhone/Reference/ или вижте коментарите в blog.mugunthkumar.com/coding/ - person Bharat; 30.08.2013

Можете да отмените известието и да зададете нова дата на задействане след 14 дни, когато обработвате известието. т.е. когато приложението ви работи на преден план, направете го в:

(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

Вижте тази SO тема: Задаване на repeatInterval в локално известие

Пробвах по този начин и работи.

person Xiang LI    schedule 30.08.2013
comment
това обратно извикване не работи, ако приложението е във фонов режим и потребителят не отхвърли уведомлението alertBody - person hariszaman; 07.12.2016

В iOS 10 можете да използвате UNTimeIntervalNotificationTrigger, за да повтаряте известието на всеки 14 дни.

UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:(14*24*3600) repeats: YES];
NSLog(@"td %@", trigger.nextTriggerDate);

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error != nil) {
        NSLog(@"Something went wrong: %@",error);
    } else {
        NSLog(@"Created! --> %@",request);
    }
}];

Надяваме се, че това ще помогне на всеки, който търси тази тема.

person Arnab    schedule 19.05.2017