1

我搜索了很多,但我没有找到解决方案,也不知道为什么会这样。

我正在创建和安排本地通知并在表格视图中显示通知列表。当我的应用程序启动时,本地通知正在创建并显示在表格中。但是在按下主页按钮后,应用程序将进入后台,并且通知会在各自的时间设置上触发。发射后他们也从系统阵列中移除

[[UIApplication sharedApplication] scheduledLocalNotifications]

当我再次打开应用程序时,它会变为活动状态并将进入前台状态。并且在应用程序委托方法正在调用

 - (void)applicationDidBecomeActive:(UIApplication *)application
        {
            AnotherClass *class = [[AnotherClass alloc]init];
               [class afterBecomeActive];
        }

这是另一个类的实现。在其中我必须刷新表格..

 -(void) afterBecomeActive
    {
        [tableView reloadData];
    }

该表视图不重新加载数据或刷新数据,包含本地通知列表。所有通知都按原样显示,并且委托方法没有调用。请帮忙。

4

3 回答 3

1

在包含 tableView 的类中执行此操作。要求获得有关 ApplicationDidBecomeActive 的通知。

- (void)awakeFromNib {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationDidBecomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];
}

收到通知后,重新加载表。

- (void)applicationDidBecomeActive:(NSNotification *)notification {

    [self.tableView reloadData];
}

可以删除应用委托中的代码。其他的都是正确的:它只是分配一个新的视图控制器,向它发送消息并将其丢弃。

于 2013-08-09T14:10:53.290 回答
0

在 applicationDidBecomeActive 中,您正在创建该类的新对象并调用表的 reloadData 方法。但是您还没有为此对象初始化表。所以,这就是不调用 tableView 的委托方法的原因。为此,您需要在 Appdelegate 中创建全局对象,或者您可以在离开应用程序时将该对象存储在 NSUserDefault 中,并在返回应用程序时检索该对象。

于 2013-08-09T12:47:39.180 回答
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

另请阅读此问题,它可能对您有所帮助。

于 2013-08-09T12:47:54.700 回答