Проблема с установкой случайного сообщения в теле оповещения каждый день в локальном уведомлении iOS

Я использовал следующий код для создания случайного сообщения из myArray (NSArray) каждый день в 8:00 с использованием локального уведомления. но это не работает. Я буду получать одно и то же сообщение каждый день, т.е. если сегодня я получу «Тест 3», то на следующий день в 8:00 я получу такое же сообщение, как «Тест 3». Я хочу создать случайное сообщение из этого массива.

Я не знаю, в чем проблема в моем коде. Ниже приведен мой пример кода для генерации случайного сообщения:

[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the current date
 NSDate *Systemdate = [NSDate date];


// Break the date up into components
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:Systemdate];

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:8];

// Notification will fire in one minute
[dateComps setMinute:0];
[dateComps setSecond:0];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];


NSArray *myArry = [NSArray arrayWithObjects:@"Test 1", @"Test 2",@"Test 3",@"Test 4",@"Test 5",@"Test 6", nil];

id randomObj = nil;
int randomIndex;
if([myArry count]>0){

    randomIndex = arc4random() % [myArry count];
    randomObj = [myArry objectAtIndex:randomIndex];
}


UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
    return;


// Notification details
localNotif.alertBody = [NSString stringWithFormat:@"%@", randomObj];


localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];


// Set the action button
localNotif.alertAction = @"View Alert";

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

// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
localNotif.userInfo = infoDict;

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

Спасибо за рекламу..!!


person jigs    schedule 23.06.2014    source источник
comment
Ваш код выглядит нормально для меня. Что вы делаете с randomObj?   -  person trojanfoe    schedule 23.06.2014
comment
Он генерирует случайный объект из этого массива.   -  person jigs    schedule 23.06.2014
comment
Что ж, код правильный, поэтому я хочу знать, что вы делаете с выбранной строкой, из-за чего вы думаете, что она не работает. Я думаю, что ошибка именно в этом.   -  person trojanfoe    schedule 23.06.2014
comment
Я не знаю, как установить alertBody для генерации случайного сообщения из этого массива каждый день в 8:00. Не могли бы вы рассказать мне, как управлять этим alertBody, как я хочу..??   -  person jigs    schedule 23.06.2014
comment
Каждый день я получаю то же сообщение, что и в тесте 4. Я хочу рандом.   -  person jigs    schedule 23.06.2014
comment
В своем вопросе вы сказали, что получаете одно и то же сообщение каждый день, но похоже, что у вас другая проблема. Покажите код, в котором вы вызываете представление предупреждений.   -  person trojanfoe    schedule 23.06.2014
comment
Нет. Я не понимаю, почему вы получаете одну и ту же строку. Так что покажите больше кода.   -  person trojanfoe    schedule 23.06.2014
comment
Я использовал тот же код, который больше ничего не интегрировал.   -  person jigs    schedule 23.06.2014
comment
@Jigs, я тоже столкнулся с той же проблемой, застрял с этим, у вас есть решение для реализации этого?   -  person Apple    schedule 21.03.2018


Ответы (1)


Я думаю, что ваша проблема здесь "localNotif.repeatInterval = NSDayCalendarUnit;", вы каждый день переназначаете одно и то же уведомление, и поэтому у вас один и тот же контент. Если вы хотите каждый раз получать другой текст, вам придется создавать отдельные объекты уведомлений для каждого случайного значения и планировать их вручную. Например, вы можете запланировать 10 или более событий, сохранить последнюю запланированную дату по умолчанию пользователя и сделать некоторую логику, чтобы перенести еще 10 или более событий за 2 дня до последней даты сохранения или что-то в этом роде. Вам нужно проверить это, в теории это выглядит хорошо и должно работать. Надеюсь это поможет.

person Misantrofia    schedule 23.06.2014