Локальное уведомление не работает в iOS

У меня есть приложение, в котором я использую локальное уведомление, если пользователь какое-то время не открывал приложение.

Если пользователь открывает приложение через локальное уведомление, моя БД обновляется и дает кредиты учетной записи пользователя, и я показываю предупреждение «У вас есть дополнительные кредиты».

Кредиты обновляются в моей БД. Когда пользователь нажимает «ОК», но мой контроллер просмотра не обновляется, и в это время он не показывает обновленные кредиты на метке.

Когда я перехожу к другому виду и возвращаюсь, он показывает.

Как я должен получать обновленные оценки в то время, когда пользователь нажимает «ОК» в AlertView?

Заранее спасибо....

Изменить

[[UIApplication sharedApplication]cancelAllLocalNotifications];
    NSDate *today=[NSDate date];
    NSLog(@"%@",today);
    NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
    [dateFormat1 setDateFormat:@"dd-MMM-yyyy hh:mm:ss a"];

    NSTimeInterval secondsInEightHours =  20;


    NSString *tt=[dateFormat1 stringFromDate:today];
    //tt=@"20-Apr-2013 06:39:32 PM";
    NSDate *Ass_date=[dateFormat1 dateFromString:tt];
    Ass_date=[Ass_date dateByAddingTimeInterval:secondsInEightHours];


    NSLog(@"%@",tt);
    NSLog(@"%@",today);
    NSLog(@"%@",Ass_date);
    //[[UIApplication sharedApplication]cancelAllLocalNotifications];
    UILocalNotification *localNotif1 = [[UILocalNotification alloc] init];
    [[UIApplication sharedApplication]cancelLocalNotification:localNotif1];
    if (localNotif1 == nil)
        return;
    localNotif1.fireDate = Ass_date;
    localNotif1.timeZone = [NSTimeZone defaultTimeZone];

    // Notification details
    localNotif1.alertBody = @"You have not played for a long time. Play and get 250 Stars credits for free!";
    // Set the action button
    localNotif1.alertAction = @"Get It Now";

    localNotif1.soundName = UILocalNotificationDefaultSoundName;
    //localNotif.applicationIconBadgeNumber = 1;
    //localNotif1.applicationIconBadgeNumber ++;
    // Schedule the notification
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif1];
    [localNotif1 release];

Это код, который я сделал в ViewDidAppear моего контроллера просмотра.

Теперь в делегате приложения в application didReceiveLocalNotification: я показал предупреждение.

        [self localNotif];
        ////NSLog(@"Recieved Notification %@",localNotif);
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"250 Stars have been credited to your account" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alert show];
        [alert release];



    }

При нажатии кнопки «ОК» из предупреждения я хочу, чтобы мой контроллер представления обновлялся или перезагружался.


person Manthan    schedule 30.05.2013    source источник
comment
Можете ли вы поделиться своим кодом здесь   -  person Shashank Kulshrestha    schedule 30.05.2013
comment
Прочитайте этот buddingdevelopers.com/   -  person Xcoder    schedule 30.05.2013
comment
Используйте тег xcode только для вопросов о самой IDE. Спасибо!   -  person Undo    schedule 01.06.2013


Ответы (3)


В тебе AppDelegate

  - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {    
       [[NSNotificationCenter defaultCenter] postNotificationName:@"creditsUpdated" object:nil];
    }

В вашем viewcontroller

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateScore:) name:@"creditsUpdated" object:nil];

Теперь метод updateScore: будет вызываться всякий раз, когда пользователь нажимает кнопку «ОК» в локальном уведомлении. Вы можете обновить ярлык здесь. Надеюсь это поможет.

person Khawar    schedule 30.05.2013

Отправьте NSNotification (не то же самое, что локальное уведомление) из любого места, где вы обновляете кредиты. Попросите UIViewController зарегистрироваться для получения этого уведомления и обновить его отображение.

Пример стандартного уведомления для публикации:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyAppCreditsUpdatedNotification" object:nil];

Чтобы получить (это происходит в вашем контроллере представления):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCredits:) name:@"MyAppCreditsUpdatedNotification" object:nil];

Не забудьте поместить это в свой Dealloc:

[[NSNotificationCenter defaultCenter] removeObserver:self];
person Paul Lynch    schedule 30.05.2013
comment
Я уже пробовал это, но у меня не сработало. Что еще я могу попробовать решить эту проблему? - person Manthan; 30.05.2013
comment
Покажи свой код. Пример, который вы отредактировали в вопросе, не публикует уведомление. - person Paul Lynch; 30.05.2013
comment
Как я уже сказал, NSNotification — это не то же самое, что локальное уведомление. - person Paul Lynch; 30.05.2013

Проблема в том, что вы обновляете БД, но не viewContoller.

Вам просто нужно обновить или перезагрузить файл viewController.

Попробуйте это, это может вам помочь.

[self.view setNeedsDisplay];

или вместо перезагрузки полного ViewController вы можете просто изменить значение label вручную, когда вы нажимаете кнопку «ОК»

[yourLabel setText:UpdatedValue];
person Prashant Nikam    schedule 30.05.2013
comment
Да, вы правы, мне нужно сослаться на мой ViewController, но приведенная выше строка у меня не сработала. Что еще я могу попробовать? - person Manthan; 30.05.2013