Как назначить случайное сообщение на localNotification

Вот быстрая и грязная реализация datediff, как доказательство концепции для решения проблемы, представленной в вопросе. Он полагается на то, что вы можете получить истекшие миллисекунды между двумя датами, вычитая их, что приводит их к их примитивному значению числа (миллисекунды с начала 1970 года).

// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function datediff(first, second) {
    // Take the difference between the dates and divide by milliseconds per day.
    // Round to nearest whole number to deal with DST.
    return Math.round((second-first)/(1000*60*60*24));
}

alert(datediff(parseDate(first.value), parseDate(second.value)));

Вы должны знать, что «нормальные» API дат (без «UTC» в имени) работают в локальный часовой пояс браузера пользователя, поэтому в целом вы можете столкнуться с проблемами, если ваш пользователь находится в часовом поясе, которого вы не ожидаете, и вашему коду придется иметь дело с переходами на летнее время. Вы должны внимательно прочитать документацию для объекта Date и его методов и для чего-либо более сложного, настоятельно рекомендуем использовать библиотеку, которая предлагает более безопасные и мощные API для обработки дат.

Также, для иллюстрации, фрагмент использует именованный доступ к объекту window для краткости, но в процессе производства вы должны использовать стандартизированные API, такие как getElementById или, более вероятно, некоторые рамки пользовательского интерфейса.

0
задан kiran 13 July 2018 в 11:26
поделиться

2 ответа

Вот один из способов сделать это

    var index = 0

    - (void)viewDidLoad {
            // Do any additional setup after loading the view.
            [super viewDidLoad];
            [self scheduleDailyLocalNotification];
        }


    -(void)scheduleDailyLocalNotification{

        UNMutableNotificationContent *localNotification = [UNMutableNotificationContent new];
            localNotification.title = [NSString localizedUserNotificationStringForKey:@“Title!” arguments:nil];
    srand(time(NULL));
    localNotification.body = [NSString localizedUserNotificationStringForKey:[self.notificationMessages objectAtIndex:index] arguments:nil];  
        if index < self.notificationMessage.count{
             index += 1
        }else{
             index = 0
         }      
            localNotification.sound = [UNNotificationSound defaultSound];
            UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 * 60 * 24  repeats:YES];

            //    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"Time for a run!" content:localNotification trigger:trigger];

            NSString *identifier = @"LOCALNOTIFICATION";
            UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier
                                                                                  content:localNotification trigger:trigger];

            UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
            center.delegate = self;
            [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
                NSLog(@"NOTIFICATION CREATED");
            }];
     }
0
ответ дан chirag shah 17 August 2018 в 13:06
поделиться
  • 1
    Тем не менее, он показывает одно и то же сообщение снова и снова! – kiran 13 July 2018 в 12:12
  • 2
    @kiran показывает тот же массаж, потому что вы помещаете локальное уведомление в режим повтора – chirag shah 13 July 2018 в 13:48
  • 3
    В этом случае уведомление запускается только один раз. – kiran 13 July 2018 в 16:21
  • 4
    @kiran, если вы хотите запускать одно и то же уведомление со случайным сообщением, тогда это невозможно – chirag shah 18 July 2018 в 07:09

Если вы не хотите повторять это уведомление снова и снова, установите интервал повторов NO

UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 * 60 * 24  repeats:NO];
0
ответ дан Sid Singh 17 August 2018 в 13:06
поделиться
  • 1
    В этом случае уведомление будет запускаться только один раз. Не на другой день – kiran 13 July 2018 в 16:21
  • 2
    @kiran Я думаю, что вам что-то не хватает. Вы должны планировать несколько уведомлений в течение нескольких дней с разными заголовками. Вы не можете получать разные заголовки с тем же запланированным уведомлением. Если я ошибаюсь, исправьте меня. – Sid Singh 16 July 2018 в 06:05
  • 3
    ты прав! Это расписание запускает одно и то же сообщение в заданный период времени. Мне интересно, как это работает здесь. – kiran 18 July 2018 в 08:29
  • 4
    Какой минимальный интервал времени для вашего уведомления? Если это более одного дня, вы можете сохранить запланированное DateTime в userInfo of Notification и всякий раз, когда приложение приходит на переднем плане, проверяет запланированное DateTime с даты начала этого уведомления, если дата огнем больше запланированной даты DateTime, затем отмените это уведомление и установите другое уведомление со случайным названием. Я знаю, что это сложно и сложно, но вы можете это сделать. Но если пользователь не выйдет на передний план более одного дня, он получит такое же уведомление :( – Sid Singh 18 July 2018 в 09:22
Другие вопросы по тегам:

Похожие вопросы: