【问题标题】:UITableView not reloading data after Enter in the Forground state进入Forground状态后UITableView不重新加载数据
【发布时间】:2013-08-09 12:38:52
【问题描述】:

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

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

[[UIApplication sharedApplication] scheduledLocalNotifications]

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

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

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

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

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

【问题讨论】:

  • 在 appDelegate 的 applicationDidBecomeActive 中,您正在创建 AnotherClass 的新实例。这将重新加载不同实例的 tableview。

标签: iphone ios uilocalnotification


【解决方案1】:

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

- (void)awakeFromNib {

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

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

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

    [self.tableView reloadData];
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要取消收到的通知。

      编写以下代码:

      - (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,它可能对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        相关资源
        最近更新 更多