我的reloaddata调用没有调用UItableviewcontroller中的委托方法?

时间:2012-11-23 08:20:28

标签: iphone ios ipad

我有一个应用程序,其中我正在使用像facebook app.its基本上是UITableViewController的sidemenu控制器。当我在视图中使用[self.tableView reloaddata]时,它将首次出现methode很好。因为有些要求我需要从另一个视图控制器重新加载这个表视图。所以我这样做了:

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

我正在重新加载数据。但是当我这样做时,reloaddata不会调用tableviewcontroller的cellforindexmethode但是它调用了numberOfRowsInSection方法。任何人都可以帮我找到我错的地方。

5 个答案:

答案 0 :(得分: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]];

答案 1 :(得分:0)

请尝试这样做并检查以下内容:

[[self yourtableviewname] reloadData];

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

希望它有所帮助。

答案 4 :(得分:0)

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

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

因为在这里您要创建SideMenuViewController类的新实例。如果调用reloadData,它将不会刷新上一个tableView实例。

强行调用viewWillappear委托方法是一种坏习惯。

<强>解决方案:

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

[sideViewControllerObject.tablView reloadData];