У меня есть контроллер представления, который содержит поле для ввода пользователем значения даты. Напротив, у меня есть поле «Напоминание до дней», чтобы пользователь мог выбрать, когда должно срабатывать уведомление. Если напоминание до дня - это тот же день , тогда уведомление устанавливается на дату, но когда день напоминания до 1 дня, то уведомление должно срабатывать раньше, чем за один день до установленной (указанной) даты. Для этого я написал метод с именем - (void) setNotification и здесь код реализации:
- (void)setNotification
{
//Set notification after confirmation of saved data
Class cls = NSClassFromString(@"UILocalNotification");
UILocalNotification *notif = [[cls alloc] init];
if (cls != nil)
{
textField = [self.fields objectAtIndex:3];
if (textField.text == @"Same Day")
{
notif.fireDate = [datePicker date];
notif.timeZone = [NSTimeZone defaultTimeZone];
}
else if(textField.text == @"1 Day")
{
NSDate *now = [datePicker date];
// set up date components
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:now];
[components setDay:-1];
// create a calendar to form date
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:now options:0];
notif.fireDate = newDate2;
notif.timeZone = [NSTimeZone defaultTimeZone];
}
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.alertBody = textView.text;
notif.alertAction = @"View";
notif.soundName = @"lazy_afternoon.mp3";
notif.applicationIconBadgeNumber = 1;
textField = [self.fields objectAtIndex:1];
NSDictionary *userDict = [NSDictionary dictionaryWithObject:self.textField.text forKey:kReminder];
notif.userInfo = userDict;
[[UIApplication sharedApplication] scheduleLocalNotification:notif];
[notif release];
}
}
Теперь, когда мы все знаем, что когда уведомление запускается, пользователь нажимает на представление. Когда мы показываем предупреждение, код реализации записывается в appDelegate. Вот оно:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// For The Purpose Of Notification.
Class cls = NSClassFromString(@"UILocalNotification");
if (cls)
{
UILocalNotification *notification = [launchOptions objectForKey:
UIApplicationLaunchOptionsLocalNotificationKey];
if (notification)
{
NSString *reminderText = [notification.userInfo objectForKey:kReminder];
[self.viewController showReminder:reminderText];
}
}
application.applicationIconBadgeNumber = 0;
}
Теперь, после получения локального уведомления, мы делаем следующее:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
application.applicationIconBadgeNumber = 0;
NSString *reminderText = [notification.userInfo objectForKey:kReminder];
[self.viewController showReminder:reminderText];
}
Теперь я установил действие - (void) setNotification для правой кнопки правой кнопки навигации под названием «Сохранить» следующим образом:
-(IBAction)save:(id)sender
{
[self setNotification];
}
Когда я не указываю никаких условий для даты пожара, то есть просто назначаю как:
notif.fireDate = [datePicker date]; с уведомлением все нормально (без проблем).
Но когда я делаю, как указано выше, то есть условие для даты срабатывания, тогда уведомление не срабатывает. Вместо того, чтобы срабатывать оповещение, когда я нажимаю «Сохранить». Также при выходе из симулятора я мог видеть некоторые проблемы с нитями. Я не понимаю, что не так с кодом (реализацией). Я перебрал несколько ссылок, а также документацию Apple из UILocalNotification. Не удалось найти какое-либо свойство или метод для установки даты в соответствии с условиями.
Я обнаружил метод "repeatTimeInterval", который является релевантным и применимым, когда уведомление должно повторяться еженедельно, раз в год и т. Д., Который не соответствует требованию, чтобы дата "была запущена, это когда напоминание дней в textField это "
Может кто-нибудь, пожалуйста, направьте меня правильно,
Спасибо всем заранее:)