在tableView中重新加载数据的问题

时间:2014-04-23 15:04:23

标签: ios objective-c uitableview reloaddata

我正在尝试根据用户帐户权限在桌面视图中重新加载数据。

这涉及的两个类是:

mainViewController menuViewController

目前我可以使用

[self.tableView reloadData];

viewWillAppear 方法中调用时重新加载数据。这对我没用,因为用户在视图加载时没有登录,因此此时没有数据填充表格。

我在menuViewController.h中创建了一个名为 populateTable 的方法,我在按下按钮时使用以下内容调用mainViewController.m文件;

(IBAction)Reload:(id)sender { 
menuViewController *mvc = [[menuViewController alloc]init];
[mvc populateTable];
}

这似乎工作正常,因为我在执行的populateTable方法中有一个NSLog。但是reloadData不起作用。

这是我的populateTable方法;

-(void)populateTable {
self.section1 = [NSMutableArray arrayWithObjects:@"test settings", @"test",           @"test",@"Users and access",@"No-track IPs", nil];
self.section2 = [NSMutableArray arrayWithObjects:@"Rules",     @"Channels",@"Goals",@"Pages", nil];
self.menu = [NSMutableArray arrayWithObjects:self.section1, self.section2, nil];
[self.tableView reloadData];
NSLog(@"Reloading data");
}

你们能帮助我吗?我一整天都在盯着这个,无处可去,谢谢!

2 个答案:

答案 0 :(得分:1)

根据我的经验,这可能是计时问题 - 当您在其上调用reloadData时IBOutlet self.tableView尚未就绪(添加NSLog并自行查看 - 它是被叫时nil

要解决此问题,必须在UIViewController的viewDidLoad方法中调用populateTable方法。这可以保证网点不是零,并且所有数据都已准备就绪。

此外,您不应使用MenuViewController[[MenuViewController alloc] init]实例化,而应使用故事板instantiateViewControllerWithIdentifier

答案 1 :(得分:1)

你的问题就在这一行,

menuViewController *mvc = [[menuViewController alloc]init];

这将创建一个menuViewController的新实例,而不是您在屏幕上看到的实例。您需要获得对自己的参考,而不是创建一个新参考。如何获得该引用取决于控制器的创建方式,时间和位置。