我正在尝试根据用户帐户权限在桌面视图中重新加载数据。
这涉及的两个类是:
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");
}
你们能帮助我吗?我一整天都在盯着这个,无处可去,谢谢!
答案 0 :(得分:1)
根据我的经验,这可能是计时问题 - 当您在其上调用reloadData时IBOutlet
self.tableView
尚未就绪(添加NSLog
并自行查看 - 它是被叫时nil
。
要解决此问题,必须在UIViewController的viewDidLoad
方法中调用populateTable方法。这可以保证网点不是零,并且所有数据都已准备就绪。
此外,您不应使用MenuViewController
来[[MenuViewController alloc] init]
实例化,而应使用故事板instantiateViewControllerWithIdentifier
。
答案 1 :(得分:1)
你的问题就在这一行,
menuViewController *mvc = [[menuViewController alloc]init];
这将创建一个menuViewController的新实例,而不是您在屏幕上看到的实例。您需要获得对自己的参考,而不是创建一个新参考。如何获得该引用取决于控制器的创建方式,时间和位置。