我有一个游戏呈现不同的场景。每小时向手机发送推送通知,该通知通过场景的等级编号,该数字导致呈现不同的场景。一切正常。突然间场景没有更新。如果我想更新场景我必须点击一个按钮,当按下完成并返回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];
}
}
}
你能否说明这种奇怪而突然的行为背后的原因是什么?
答案 0 :(得分:0)
您可能无法正确刷新屏幕上显示的数据。出现这种情况的原因有以下几种:
我建议您检查是否在推送通知的日期被删除并存储后刷新视图。
答案 1 :(得分:0)
问题结果是因为我把值feched放入_level而不是app.委托中的self.level。换句话说,我使用的是ivar而不是导致KVO错误的属性,
more info about the difference between property and ivar is here