我搜索了很多,但我找不到解决办法,也不知道为什么会这样。
我正在创建和安排本地通知并在表格视图中显示通知列表。当我的应用程序启动时,本地通知正在表中创建和显示。但是在按下主页按钮后,应用程序将在后台输入,并且通知将按其各自的时间设置触发。发射后,它们也从系统阵列中移除
[[UIApplication sharedApplication] scheduledLocalNotifications]
当我再次打开应用程序时,它会变为活动状态并进入前台状态。并且在app中委托方法正在调用
- (void)applicationDidBecomeActive:(UIApplication *)application
{
AnotherClass *class = [[AnotherClass alloc]init];
[class afterBecomeActive];
}
这是AnotherClass实现。我必须刷新表..
-(void) afterBecomeActive
{
[tableView reloadData];
}
该表视图不重新加载数据或刷新数据,包含本地通知列表。所有通知都是按原样显示的,并且委托方法没有调用。 请帮忙。
答案 0 :(得分:1)
在包含tableView的类中执行此操作。要求收到有关ApplicationDidBecomeActive的通知。
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive:)
name:UIApplicationDidBecomeActiveNotification object:nil];
}
收到通知后,请重新加载表格。
- (void)applicationDidBecomeActive:(NSNotification *)notification {
[self.tableView reloadData];
}
可以删除app委托中的代码。其他的都是正确的:它只是分配一个新的视图控制器,向它发送一条消息然后扔掉它。
答案 1 :(得分:0)
在applicationDidBecomeActive中,您正在创建该类的新对象,并且只是调用表的reloadData方法。但是您没有初始化此对象的表。所以,这就是不调用tableView的委托方法的原因。为此,您需要在Appdelegate中创建该对象全局,或者您可以在离开应用程序时将该对象存储在NSUserDefault中,并在返回应用程序时检索该对象。
答案 2 :(得分:0)
您需要取消收到的通知。
编写以下代码:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[UIApplication sharedApplication] cancelLocalNotification:notification]; // this is code for cancel specific notification.
application.applicationIconBadgeNumber = [[UIApplication sharedApplication]applicationIconBadgeNumber]-1; /// here you need to decrease badge number if you have to added.
}
然后重新加载UITableView
。
另请阅读This Question,这可能会对您有帮助。