Ios 实时重新加载表视图

Ios 实时重新加载表视图,ios,uitableview,uilocalnotification,reloaddata,Ios,Uitableview,Uilocalnotification,Reloaddata,应用程序会收到UILocalNotification,但如果用户在启动时在UITableViewController,则不会重新加载表视图(包含计划通知)。用户必须退出该视图并再次加载该视图,以便加载单元格,并且由于已触发通知,因此该通知不会显示在该表视图的任何单元格上 问题是:如果用户触摸到包含刚刚触发的通知的特定tableView单元格,应用程序就会崩溃,因为通知不再存在 我已经在每个可能的地方实现了-(void)reloadData,但它仍然不能实时加载 有什么更好的解决方案 其他详细信息

应用程序会收到
UILocalNotification
,但如果用户在启动时在
UITableViewController
,则不会重新加载表视图(包含计划通知)。用户必须退出该视图并再次加载该视图,以便加载单元格,并且由于已触发通知,因此该通知不会显示在该表视图的任何单元格上

问题是:如果用户触摸到包含刚刚触发的通知的特定tableView单元格,应用程序就会崩溃,因为通知不再存在

我已经在每个可能的地方实现了
-(void)reloadData
,但它仍然不能实时加载

有什么更好的解决方案

其他详细信息,如何在显示通知后推送特定视图(当用户在手机锁定时滑动应用程序图标)


任何帮助都将不胜感激,因为还有最后的细节要发布我的第一个应用程序

您描述的问题是由当前本地通知引起的:在处理通知时,该通知仍在计划通知列表中,因此刷新表视图将无效。这个问题的一个解决方案是延迟重新加载表视图,直到处理通知之后,比如

// In your app delegate
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.localNotificationsController reloadDataIfNeeded];
    });
}

// In your controller that shows the local notifications
- (void)reloadDataIfNeeded
{
    if (![self isViewLoaded]) return;

    [self.tableView reloadData];
}
如果您只使用只触发一次的通知,也可以从列表中删除该通知(以便确保该通知仍将消失):

至于问题的第二部分(“在显示通知后(当用户在手机锁定时滑动应用程序图标时),如何推送特定视图?”),有两种情况下,应用程序如何通过本地通知激活

  • 您的应用程序已挂起,但仍在内存中。然后选择本地推送通知将使应用程序进入前台,
    -application:didReceiveLocalNotification:
    将被调用,
    [application application state]
    将成为
    UIApplicationStateInactive
  • 您的应用程序未运行,即未挂起,未在内存中。然后您将在
    中的
    启动选项中收到本地通知-应用程序:didFinishLaunchingWithOptions:

    UILocalNotification *localNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    
    不管文档怎么说,在这种情况下,
    -application:didReceiveLocalNotification:
    不会被调用


  • 因此,要显示唤醒应用程序的通知,您可以在这两种情况下推送控制器。

    当您说在每个可能的位置都实现了重新加载数据时,不清楚您的意思。在您正在实现的TableViewController子类中,在接受通知的代码中,我希望您只需要我需要执行[self.tableView reloadData]来获取所需的内容。您有可以共享的代码吗?您能解释一下崩溃的性质吗?@AlbrahimZ让我解释得更清楚一点:我有一个由未来UILocalNotification填充的tableView。如果触发通知,tableView会自动关闭一个单元格(用于显示此时触发的特定通知的单元格)。但如果我当前在tableview控制器中,则不会重新加载。如果我返回主视图并再次加载tableview,它将正常刷新。我希望它在通知发出后立即实时刷新,即使用户当前正在查看其未来的通知。例如,如果我安排了通知,从现在起的1分钟内,我决定查看我未来的通知,我会打开该tableview。但是,如果本地通知在我处于tableview中时触发,它将不会刷新,它会说我仍然计划了该通知。要更新,我必须退出该视图并重新加载tableview。这是一个很好的答案。谢谢非常感谢。
    UILocalNotification *localNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];