在 tableView 中重新加载数据的问题
Posted
技术标签:
【中文标题】在 tableView 中重新加载数据的问题【英文标题】:Problems reloading data in a tableView 【发布时间】:2014-04-23 15:04:23 【问题描述】:我正在尝试根据用户登录时的帐户权限在表格视图中重新加载数据。
其中涉及的两个类是:
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");
你们能帮帮我吗,我一直盯着这个看了一天,无处可去,谢谢!
【问题讨论】:
所以你的 tableview 在 menuViewController 中? menuViewController 的视图在什么时候添加到视图层次结构中? 【参考方案1】:根据我的经验,这可能是时间问题 - 当您在其上调用 reloadData 时,self.tableView
的 IBOutlet
尚未准备好(添加 NSLog
并亲自查看 - 调用时为 nil
) .
要解决这个问题,必须在 UIViewController 的 viewDidLoad
方法中调用 populateTable 方法。这保证了 outlet 不为零,并且一切都为您的数据填充做好了准备。
此外,您不应使用 [[MenuViewController alloc] init]
实例化您的 MenuViewController
,而应使用情节提要的 instantiateViewControllerWithIdentifier
。
【讨论】:
对我的问题进行了排序,我很愚蠢,我更改了 menuViewController mvc = [[menuViewController alloc]init];到 menuViewController *mvc = (menuViewController) self.slidingViewController.underLeftViewController;感谢您的帮助!【参考方案2】:你的问题是这一行,
menuViewController *mvc = [[menuViewController alloc]init];
这会创建一个新的 menuViewController 实例,而不是您在屏幕上看到的那个。您需要获得对现有的引用,而不是创建新的引用。如何获得该引用取决于创建控制器的方式、时间和地点。
【讨论】:
以上是关于在 tableView 中重新加载数据的问题的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在警报视图中按下按钮后,tableView 不会重新加载数据