0

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

如果用户通过本地通知打开应用程序,我的数据库将得到更新并向用户的帐户提供积分,并且我会显示警报“您有额外的积分”。

我的数据库中的信用更新当用户单击确定但我的视图控制器没有刷新并且当时它没有显示标签上更新的信用时。

当我去另一个视图并回来时它显示。

当用户从 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 上所做的代码。

现在在应用程序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];



    }

单击警报中的 Ok 按钮后,我希望我的视图控制器能够刷新或重新加载。

4

3 回答 3

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];
于 2013-05-30T10:10:07.370 回答
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:每当用户点击本地通知上的“确定”按钮时,都会调用Now方法。您可以在此处更新标签。希望这可以帮助。

于 2013-05-30T10:13:12.617 回答
0

问题是您正在更新数据库而不是viewContoller.

您只需要刷新或重新加载您的viewController.

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

[self.view setNeedsDisplay];

否则,ViewController您可以label在单击“确定”按钮时手动更改值,而不是重新加载完整的

[yourLabel setText:UpdatedValue];
于 2013-05-30T10:12:25.263 回答