本地通知在ios中运行不佳

时间:2013-05-30 10:01:06

标签: iphone ios objective-c uilocalnotification

如果用户有时没有打开应用,我正在使用本地通知的应用。

如果用户通过本地通知打开应用程序,我的数据库会更新并向用户的帐户提供信用,我正在显示提醒“您有额外的信用”。

在我的数据库中更新了积分当用户点击“确定”但我的视图控制器没有刷新并且当时没有在标签上显示更新的积分。

当我转到另一个视图并回来时显示。

当用户从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];

这是我在viewcontroller的ViewDidAppear上做的代码。

现在,在应用程序didReceiveLocalNotification:中的app delegate中,我显示了一个警告。

        [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];



    }

单击警报中的“确定”按钮我希望我的视图控制器能够刷新或重新加载。

3 个答案:

答案 0 :(得分:2)

从更新积分的任何地方发送NSNotification(与本地通知不同)。让您的UIViewController注册该通知,并更新其显示。

标准通知示例,发布:

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

接收(这在你的视图控制器中):

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

别忘了把它放在你的dealloc中:

[[NSNotificationCenter defaultCenter] removeObserver:self];

答案 1 :(得分:1)

在你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:方法。您可以在此处更新标签。 希望这会有所帮助。

答案 2 :(得分:0)

问题是您要更新数据库,而不是viewContoller

您只需刷新或重新加载viewController

试试这个,这可能会对你有帮助。

[self.view setNeedsDisplay];

或者 而不是重新加载完整的ViewController,只需点击“确定”按钮即可手动更改label

[yourLabel setText:UpdatedValue];