Огонь Дата выпуска в локальном уведомлении - PullRequest
0 голосов
/ 31 января 2012

У меня есть контроллер представления, который содержит поле для ввода пользователем значения даты. Напротив, у меня есть поле «Напоминание до дней», чтобы пользователь мог выбрать, когда должно срабатывать уведомление. Если напоминание до дня - это тот же день , тогда уведомление устанавливается на дату, но когда день напоминания до 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 это "

Может кто-нибудь, пожалуйста, направьте меня правильно,

Спасибо всем заранее:)

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Я полагаю, что если вы проверите эту ссылку, вы узнаете.Но из того, что я видел, код, который вы предоставляете, в любом случае с этого сайта.

http://useyourloaf.com/blog/2010/7/31/adding-local-notifications-with-ios-4.html

0 голосов
/ 31 января 2013

Я знаю, что прибыл немного поздно, но для меня ошибка в вашем коде здесь:

if (textField.text == @"Same Day")

Поскольку вы не можете сравнивать строки NSS с помощью оператора ==.Я думаю, что если вы используете isEqualToString:(NSString*), он будет работать правильно.Было бы здорово, если бы вы могли отредактировать исходное сообщение и исправить код, чтобы люди, которые ищут информацию о локальных уведомлениях, не сталкивались с той же проблемой.

...