推送通知并从中接收数据

时间:2014-08-13 00:22:47

标签: ios iphone uiviewcontroller sprite-kit

我有一个游戏呈现不同的场景。每小时向手机发送推送通知,该通知通过场景的等级编号,该数字导致呈现不同的场景。一切正常。突然间场景没有更新。如果我想更新场景我必须点击一个按钮,当按下完成并返回rootViewController时,它会带我到另一个viewController,它会呈现新的更新场景。  有时它在按下推送通知时工作得很好,有时候,我必须按一个按钮然后转到另一个视图Conroller才能显示更新的场景

在ViewWillLayoutSubviews中调用比较数字并显示场景的方法[self checkSceneLevel]。

我有[委托addObserver:self forKeyPath:@" currentLevel" options:0 context:nil];

还要在viewWillLayoutSubviews中检查当前级别。

在app deletgate中我有这个定义的

`

-(void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{
    NSLog(@"userInfo= %@ ",userInfo);
    [self handleBackgroundNotification:userInfo];
     completionHandler(UIBackgroundFetchResultNewData);
}

`

   - (void)handleBackgroundNotification:(NSDictionary *)notification
{
    NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
    NSMutableString *alert = [NSMutableString stringWithString:@""];
    NSDictionary *info=aps[@"info"];
    if (info)
    {
        if (info[@"current_level"]) {
            _currentLevel = info[@"current_level"];
            [[NSUserDefaults standardUserDefaults] setObject:_currentLevel  forKey:@"currentLevel"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }



        }
你能否说明这种奇怪而突然的行为背后的原因是什么?

2 个答案:

答案 0 :(得分:0)

您可能无法正确刷新屏幕上显示的数据。出现这种情况的原因有以下几种:

  • 您没有及早刷新数据,视图已加载
  • 也许您指定的一个viewControllers被压入堆栈,当您返回到rootViewController时会强制重新加载它下面的视图(当您弹出时调用viewDidLoad)。

我建议您检查是否在推送通知的日期被删除并存储后刷新视图。

答案 1 :(得分:0)

问题结果是因为我把值feched放入_level而不是app.委托中的self.level。换句话说,我使用的是ivar而不是导致KVO错误的属性,

more info about the difference between property and ivar is here