2

我有一个应用程序,我在其中使用像 facebook 应用程序这样的 sidemenu 控制器。它基本上是一个UITableViewController。当我[self.tableView reloaddata]在视图中使用时,它第一次工作正常时会出现方法。由于某些要求,我需要重新加载这个表视图从另一个视图控制器。所以我这样做了:

 SideMenuViewController *second = [[SideMenuViewController alloc]init];
 [second viewWillappear:YES]

我在哪里重新加载数据。但是当我这样做时,reloaddata 不是调用 tableviewcontroller 的 cellforindex 方法,而是调用 numberOfRowsInSection 方法。任何人都可以帮助我找出我哪里出错了。

4

5 回答 5

3

您可以对此使用通知。

在 SideMenuViewController viewDidLoad 方法中添加一个:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(reloadTable)
                                             name:@"SideMenuShouldRefreshDataNotification"
                                           object:nil];

reloadTable 方法如下所示:

-(void)reloadTable {
dispatch_async(dispatch_get_main_queue(),^{
  [self.tableView reloadData];
});
}

当您想刷新表格时,您只需从应用程序中的任何位置发布此通知。

[[NSNotificationCenter defaultCenter] postNotificationName:[NSNotification notificationWithName:@"SideMenuShouldRefreshDataNotification" object:nil]];
于 2012-11-24T08:49:56.023 回答
0

像这样尝试并在下面检查:

[[self yourtableviewname] reloadData];
于 2012-11-23T08:23:50.570 回答
0

如果您创建一个新实例并在其上调用方法,则不会导致旧实例被刷新。调用refreshData您现有的TableView实例,而不是创建一个新实例。

于 2012-11-23T08:29:02.687 回答
0

使用协议委托重新加载。另一个视图控制器可能无法以您使用的方式调用 viewWillAppear。通过编写一个委托来重新加载 tableview,该委托将返回到其中包含 tableview 的控制器。

希望能帮助到你。

于 2012-11-23T08:30:18.700 回答
0

此代码永远不会重新加载您的 tableView:

SideMenuViewController *second = [[SideMenuViewController alloc]init];
[second viewWillappear:YES]

因为在这里你正在创建你的SideMenuViewController类的一个新实例。如果您调用 reloadData 它不会刷新以前的 tableView 实例。

而且强行调用viewWillappear委托方法是个坏习惯。

解决方案:

SideMenuViewController在 viewController 的 @interface 中声明一个实例并为此编写属性。当您转到该视图时,请设置SideViewController实例。当用户按下后退按钮调用时:

[sideViewControllerObject.tablView reloadData];
于 2012-11-23T09:51:42.773 回答