在Forground状态下输入后,UITableView不重新加载数据

时间:2013-08-09 12:38:53

标签: iphone ios uilocalnotification

我搜索了很多,但我找不到解决办法,也不知道为什么会这样。

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

[[UIApplication sharedApplication] scheduledLocalNotifications]

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

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

这是AnotherClass实现。我必须刷新表..

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

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

3 个答案:

答案 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,这可能会对您有帮助。